X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=exercices%2Farithmetic.lsp;h=f020099e8ea8be02431afe00dcc9d298375155c3;hb=25450b8430ab9b9f699580f0bef9ab0c1f65c5b2;hp=160645e3840954a726524daacbd51e2339d3c9de;hpb=5712270167a05905eed75f7cecb0e49af4225537;p=TD_LISP.git diff --git a/exercices/arithmetic.lsp b/exercices/arithmetic.lsp index 160645e..f020099 100755 --- a/exercices/arithmetic.lsp +++ b/exercices/arithmetic.lsp @@ -60,19 +60,56 @@ (setq L '(3 7 + 4 2 + *)) (setq M '(4 3 7 + * 2 -)) +(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) (println (calculExp '() M)) +(println (calculExp '() N)) + +;(trace nil) + +(setq Q '(+ (* x 0) (* 10 (+ y 0)))) +(define (algsimplificator L) + (cond + ((null? L) '()) + ((= (first L) ) (rest L)) + + )) +(println "algsimplificator") +;(println algsimplificator(Q)) + +(define (fibonacci N) + (cond + ((= N 0) 0) + ((= N 1) 1) + ((> N 1) (+ (fibonacci (- N 1)) (fibonacci (- N 2)))))) +(println "fibonacci") +;(println (fibonacci 21)) +;(println (fibonacci 14)) +(println (fibonacci 20)) +(println (time (fibonacci 20))) + +;(trace true) + +(define (fibo:fibo n) + (if (not fibo:mem) (set 'fibo:mem '(0 1))) + (dotimes (i (- n 1)) + (push (+ (fibo:mem -1) (fibo:mem -2)) fibo:mem -1)) + (last fibo:mem)) +(println "fibo") +(println (fibo 20)) +(println (time (fibo 20))) ;(trace nil)