Add Somme3ou5 function
[TD_LISP.git] / exercices / lists.lsp
index e97d74796833b3869973bd155c33bb1b69a650d4..35590dada335ff070e4a9546859cdafbe8777b1c 100755 (executable)
 
 (define (aplatir L) 
   (cond
 
 (define (aplatir L) 
   (cond
-    ((null? L) nil)
-    ((atom? L) (list L)) ;FIXME: the "casting" is not working properly
+    ((null? L) '())
+    ((atom? L) (list L))
     ((append (aplatir (first L)) (aplatir (rest L))))))
 (println "aplatir/flat")
     ((append (aplatir (first L)) (aplatir (rest L))))))
 (println "aplatir/flat")
-;(println (aplatir T))
+(println (aplatir T))
 (println (flat T))
 
 ;(trace nil)
 (println (flat T))
 
 ;(trace nil)
     ((append 
        ;the pivot is the first element of the list
        (qsort (list< (first L) (rest L))) 
     ((append 
        ;the pivot is the first element of the list
        (qsort (list< (first L) (rest L))) 
-       (cons (first L) '()) 
+       (list (first L))
        (qsort (list>= (first L) (rest L)))))))
 (println "qsort")
 (println (qsort C))
        (qsort (list>= (first L) (rest L)))))))
 (println "qsort")
 (println (qsort C))
     ((and (inclu L1 L2) (inclu L2 L1) true))))
 (println "filtre")
 (println (filtre L1 L2 ?))
     ((and (inclu L1 L2) (inclu L2 L1) true))))
 (println "filtre")
 (println (filtre L1 L2 ?))
+(println (filtre L M ?))
+
+;algorithm written on the board
+(define (filtrerec L1 L2 C)
+  ;FIXME: use the function argument C
+  (cond
+    ((null? L1)
+      (cond
+        ((null? L2) true)
+        ((= '? (first L2)) (filtrerec L1 (rest L2)))
+        (nil)))
+    ((null? L2) (filtrerec L2 L1))
+    ((= '? (first L1)) (filtrerec (rest L1) L2))
+    ((= '? (first L2)) (filtrerec L1 (rest L2)))
+    ((= (first L1) (first L2)) (filtrerec (rest L1) (rest L2)) )
+    (nil)))
+(println "filtrerec")
+(println (filtrerec L1 L2 ?))
+(println (filtrerec L M ?))
 
 (exit)
 
 (exit)