Implement more exercices' functions
[TD_LISP.git] / exercices / lists.lsp
1 #!/usr/bin/env newlisp
2
3 (setq L '(1 9 3 7 0 5))
4 (setq M '(2 6 5 4 0 1 3))
5
6 (define (mem E L) ;la function mem a 2 arguments
7 (if (null? L) nil
8 (if (= (first L) E) true
9 (mem E (rest L)))))
10 (println (mem 9 L))
11
12 (define (boolmemrec E L)
13 (cond
14 ((null? L) nil)
15 ((= (first L) E) true)
16 ((mem E (rest L)))))
17 (println (boolmemrec 10 L))
18
19 (define (mem E L) ;la function mem a 2 arguments
20 (if (null? L) nil
21 (if (= (first L) E) L
22 (mem E (rest L)))))
23 (println (mem 3 L))
24
25 (define (mem E L)
26 (cond
27 ((null? L) nil)
28 ((= (first L) E) L)
29 ((mem E (rest L)))))
30 (println (mem 9 L))
31 (println (member 9 L))
32 (println (mem 8 L))
33 (println (member 8 L))
34
35 (define (concatene L1 L2)
36 (if (null? L1) L2
37 (cons (first L1) (concatene (rest L1) L2))))
38 (println (concatene L M))
39 (println (append L M))
40
41 ;(trace true)
42
43 (define (rang x L)
44 (if (boolmemrec x L)
45 (cond
46 ((= x (first L)) 0)
47 ((+ 1 (rang x (rest L)))))
48 nil))
49 (println (rang 4 L))
50 (println (find 4 L))
51 (println (rang 0 L))
52 (println (find 0 L))
53
54 ;(trace nil)
55
56 (define (tete n L)
57 (cond
58 ((null? L) nil)
59 ((= n 0) nil)
60 ((cons (first L) (tete (- n 1) (rest L))))))
61 ;FIXME: return nil after the first n elements in the list
62 (println (tete 3 L))
63 (println (slice L 0 3))
64 (println (0 3 L))
65
66 (define (inter L1 L2)
67 (cond
68 ((null? L1) nil)
69 ((member (first L1) L2) (cons (first L1) (inter (rest L1) L2)))
70 ((inter (rest L1) L2))))
71 ;FIXME: return nil after ...
72 (println (inter L M))
73 (println (intersect L M))
74
75 (setq N '(1 9 3))
76 (define (inclu L1 L2)
77 (cond
78 ((null? L1) true)
79 ((null? L2) nil)
80 ((= (first L1) (first L2)) (inclu (rest L1) (rest L2)))
81 ((inclu L1 (rest L2)))))
82 (println (inclu N L))
83 (println (inclu L M))
84 ;did not found a newlisp builtin equivalent function
85
86 (exit)