[net.ai] Request for OPS5 examples

benson@dcdwest.UUCP (03/05/84)

I am learning ops5 using the Forgy manual.  It is tough
going and I find the manual a little obscure.  I have received
a few example programs from other people, but I sure would
like some more.  If you have a good example OPS5 program,
could you mail it to me.  

Thanks in advance,


Peter Benson
decvax!ittvax!dcdwest!benson
ucbvax!sdcsvax!dcdwest!benson

pozsvath@ctvax.UUCP (03/24/84)

#R:dcdwest:-10800:ctvax:45200002:000:1807
ctvax!pozsvath    Mar 22 21:52:00 1984

;;;							  /
;;;						Peter Ozsvath
;;;	
;;;			Factorial Program in OPS-5
;;;		 Simulates the stack in working memory     
;;;	

;;;  Stage 1. Fill the working memory with (fact 1) (fact 2)...(fact n)
;;;	      
(p fact0 (fact {<x> = 0}) --> (remove 1) (make factorial 1 1))

(p factn (fact {<n> > 0}) --> (make fact (compute <n> - 1)))

;;;  Negative number entered. Quit
(p factneg (fact {<n> < 0}) -->
    (write "Good-bye."))

;;;  Stage 2. Sweep out the unnecessary (fact k) and (factorial k (k-1)!) 
;;;	and add new (factorial (k+1) k!
;;;	
(p factorial (factorial <x> <y>) (fact <x>) --> 
    (remove 2)
    (remove 1)
    (make factorial (compute (<x> + 1)) (compute (<x> * <y>))))

;;;  When no more (fact k) statements are left, factorial k is fount
;;;
(p factorial2 (factorial <x> <y>) -(fact <x>) -->
    (write (crlf))
    (write (compute <x> - 1))
    (write "!! =")
    (write <y>)
    (write (crlf))
    (make infinifact))

;;;  Called once at the beginning
;;;
(p pretty_fact (start) -->
    (write "Program to demonstrate the power, compactness, and robustness")
    (write (crlf))
    (write "of the Winning OPS 5. This program inputs numbers whose")
    (write (crlf))
    (write "factorials - lo and behold - it computes RECURSIVELY")
    (write (crlf))
    (write (crlf))
    (remove 1)
    (make infinifact))

;;;  Circular "loop" that reads in numbers
;;;
(p infinifact (infinifact) -->
    (remove 1)
    (write "Enter a positive number to compute its factorial,")
    (write (crlf))
    (write "or a negative one to quit")
    (write (crlf))
    (bind <x> (accept))
    (make fact <x>))

;;;  Start
(start ((start)))

This program computes factorials in OPS-5. Some things seem to be
rather difficult to do in OPS-5. This same program could be 
written in several lines of lisp!