Implement a better filter function
[TD_LISP.git] / exercices / lists.lsp
index 25360bcf166d051570501485b0e2ed6ddb61c5ca..e97d74796833b3869973bd155c33bb1b69a650d4 100755 (executable)
 
 ;(trace true)
 
-(define (rang x L)
-  (if (boolmemrec x L)
+(define (rang E L)
+  (if (boolmemrec E L)
     (cond 
-      ((= x (first L)) 0)
-      ((+ 1 (rang x (rest L)))))
+      ((= E (first L)) 0)
+      ((+ 1 (rang E (rest L)))))
     nil))
 (println "rang/find")
 (println (rang 4 L))
 
 ;(trace nil)
 
-(define (tete n L) 
+(define (tete N L)
   (cond 
     ((null? L) '())
-    ((= n 0) '())
-    ((cons (first L) (tete (- n 1) (rest L))))))
+    ((= N 0) '())
+    ((cons (first L) (tete (- N 1) (rest L))))))
 (println "tete/slice")
 (println (tete 3 L))
 (println (slice L 0 3))
 (println (reverseL L))
 (println (reverse L))
 
-(define (list< n L)
+(define (list< N L)
   (cond
     ((null? L) '())
-    ((>= (first L) n) (list< n (rest L)))
-    ((cons (first L) (list< n (rest L))))))
+    ((>= (first L) N) (list< N (rest L)))
+    ((cons (first L) (list< N (rest L))))))
 (println "list<")
 (println (list< 5 L))
 (println (list< 5 C))
 
-(define (list>= n L)
+(define (list>= N L)
   (cond
     ((null? L) '())
-    ((< (first L) n) (list>= n (rest L)))
-    ((cons (first L) (list>= n (rest L))))))
+    ((< (first L) N) (list>= N (rest L)))
+    ((cons (first L) (list>= N (rest L))))))
 (println "list>=")
 (println (list>= 5 C))
 
 (setq L1 '(A ? ? B C D ?))
 (setq L2 '(? A B ? C ? ? D))
 
-(define (removeC c L)
-  (cond
-    ((null? L) '())
-    ((= c (first L))) (removeC c (rest L))
-    (((cons (first L) (removeC c (rest L)))))))
-(println (removeC A L1))
+;(println "replace")
+;(println L1)
+;(println L2)
+;the replace function modify the passed argument
+;(println (replace 'B L1))
+;(println (replace '? L1))
+;(println (replace '? L2))
+;(println L1)
+;(println L2)
 
 (define (filtre L1 L2 C)
+  ;the replace function modify the passed argument
+  ;FIXME: use the function argument C
+  (replace '? L1)
+  (replace '? L2)
   (cond 
     ((and (null? L1) (null? L2)) true)
     ((and (not (null? L1)) (null? L2)) nil)
     ((and (null? L1) (not (null? L2))) nil)
     ((and (inclu L1 L2) (inclu L2 L1) true))))
-;(println "filtre")
-;(println (filtre L1 L2 ?))
+(println "filtre")
+(println (filtre L1 L2 ?))
 
 (exit)