From: Jérôme Benoit Date: Mon, 8 May 2017 19:54:20 +0000 (+0200) Subject: Add Somme3ou5 function X-Git-Url: https://git.piment-noir.org/?p=TD_LISP.git;a=commitdiff_plain;h=a54a070c1c0a6e5dfdf7f45b62c01aee6b9f0212 Add Somme3ou5 function Signed-off-by: Jérôme Benoit --- diff --git a/exercices/arithmetic.lsp b/exercices/arithmetic.lsp index f020099..0d55480 100755 --- a/exercices/arithmetic.lsp +++ b/exercices/arithmetic.lsp @@ -70,7 +70,7 @@ ((= (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))) - ((number? (first 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) @@ -83,7 +83,11 @@ (define (algsimplificator L) (cond ((null? L) '()) + ; I'm having hard time to find a way of escaping the '(' and ')' characters ((= (first L) ) (rest L)) + ;here is the idea: detect the lower well formed expression: begin with (op and finish with ) where op = + - * / and have only two parameters that are atoms. + ;then if it match a know pattern, simplify it by following the matching rule. + ;do it again on the upper layer recursively until we only have (op A B) that just match no known simplication rules. )) (println "algsimplificator") @@ -105,12 +109,26 @@ (define (fibo:fibo n) (if (not fibo:mem) (set 'fibo:mem '(0 1))) (dotimes (i (- n 1)) + ;this create a LIFO (or stack) of all previous fibonnaci serie result values (push (+ (fibo:mem -1) (fibo:mem -2)) fibo:mem -1)) (last fibo:mem)) (println "fibo") (println (fibo 20)) (println (time (fibo 20))) +;(trace nil) +;(trace true) + +(setq S '()) +(define (Somme3ou5 N) + (dolist (i (sequence 0 N)) + (cond + ((= (mod i 3) 0) (setq S (cons i S))) + ((= (mod i 5) 0) (setq S (cons i S))))) + (apply + S)) +(println "Somme3ou5") +(println (Somme3ou5 100)) + ;(trace nil) (exit)