Add the arthmetic suffixed expression calculator function
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 7 May 2017 19:06:03 +0000 (21:06 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 7 May 2017 19:06:03 +0000 (21:06 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
exercices/arithmetic.lsp

index d3b6cefc06903923ebcb5723aefceaa9da0b56ff..160645e3840954a726524daacbd51e2339d3c9de 100755 (executable)
 (println "(comb 12 8) = "(comb 12 8))
 
 ;(trace nil)
+;(trace true)
 
 (setq L '(3 7 + 4 2 + *))
-(setq P '())
+(setq M '(4 3 7 + * 2 -))
 (define (calculExp P L)
   (cond
-    ((null? L) 0)
-    ((= (first L) '+) (+ (first P) (calculExp (rest P) (rest L)))) 
-    ((= (first L) '-) (- (first P) (calculExp (rest P) (rest L))))
-    ((= (first L) '*) (* (first P) (calculExp (rest P) (rest L))))
+    ((null? L) P)
+    ((= (first L) '+) (calculExp (cons (+ (first P) (P 1)) (rest (rest P))) (rest L))) 
+    ((= (first L) '-) (calculExp (cons (- (P 1) (first P)) (rest (rest P))) (rest L)))
+    ((= (first L) '*) (calculExp (cons (* (first P) (P 1)) (rest (rest P))) (rest L)))
     ;FIXME: test for divide by zero
-    ((= (first L) '/) (/ (first P) (calculExp (rest P) (rest L))))
-    ((cons (first L) (calculExp P (rest L))))))    
-;(println (calculExp P L))
+    ((= (first L) '/) (calculExp (cons (/ (P 1) (first P)) (rest (rest P))) (rest L)))
+    ((calculExp (cons (first L) P) (rest L)))))    
+(println "calculExp")
+(println (calculExp '() L))
+;(trace true)
+(println (calculExp '() M))
+
+;(trace nil)
 
 (exit)