((= (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)
(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")
(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)