Fixlet to the arithmetic expressions calculator
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 7 May 2017 21:17:01 +0000 (23:17 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 7 May 2017 21:17:01 +0000 (23:17 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
exercices/arithmetic.lsp

index 4bfa94f319b2d8fa207a1a01af672a33da8a2123..f020099e8ea8be02431afe00dcc9d298375155c3 100755 (executable)
 (setq N '(10 10 5 / +))
 (define (calculExp P L)
   (cond
-    ((null? L) P)
-    ((= (first L) '+) (calculExp (cons (+ (first P) (P 1)) (rest (rest P))) (rest L))) 
+    ((null? L) (first P))
+    ; all these conditions could probably be simplified
+    ((= (first L) '+) (calculExp (cons (+ (P 1) (first P)) (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)))
+    ((= (first L) '*) (calculExp (cons (* (P 1) (first P)) (rest (rest P))) (rest L)))
     ;FIXME: test for divide by zero
     ((= (first L) '/) (calculExp (cons (/ (P 1) (first P)) (rest (rest P))) (rest L)))
-    ((calculExp (cons (first L) P) (rest L)))))    
+    ((number? (first L)) (calculExp (cons (first L) P) (rest L)))))    
 (println "calculExp")
 (println (calculExp '() L))
 ;(trace true)