X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=exercices%2Flists.lsp;h=e97d74796833b3869973bd155c33bb1b69a650d4;hb=d4b2508d9663596624e7f44c701147c27c6cceb2;hp=39114ad8d0ba3f786f287ec5e8c015209ff50add;hpb=ada8f303fa63f62209dddeab6f4618f5b73a66b7;p=TD_LISP.git diff --git a/exercices/lists.lsp b/exercices/lists.lsp index 39114ad..e97d747 100755 --- a/exercices/lists.lsp +++ b/exercices/lists.lsp @@ -46,11 +46,11 @@ ;(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)) @@ -60,11 +60,11 @@ ;(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)) @@ -144,21 +144,63 @@ (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)) +;(trace true) + +(define (qsort L) + (cond + ((null? L) '()) + ((append + ;the pivot is the first element of the list + (qsort (list< (first L) (rest L))) + (cons (first L) '()) + (qsort (list>= (first L) (rest L))))))) +(println "qsort") +(println (qsort C)) + +;(trace nil) + +;we suppose both lists are flat +(setq L1 '(A ? ? B C D ?)) +(setq L2 '(? A B ? C ? ? D)) + +;(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 ?)) + (exit)