File tree Expand file tree Collapse file tree 2 files changed +64
-43
lines changed
little_book/little_scheme Expand file tree Collapse file tree 2 files changed +64
-43
lines changed Load Diff This file was deleted.
Original file line number Diff line number Diff line change
1
+ ; eq? : takes two non-numeric atom.
2
+ ; = : for numbers
3
+ ; eqan?: atom equal
4
+ ; eqlist?: list equal
5
+ ; equal? : s-expression equal
6
+
7
+ ; for real-world scheme: eq? is for reference equal
8
+ ; while equal? is for value equal.
9
+
10
+ (define (atom? s )
11
+ (and (not (pair? s))
12
+ (not (null? s))))
13
+
14
+ ; equivalent to guile's eq?
15
+ (define (eqan? a1 a2 )
16
+ (cond ((and (number? a1) (number? a2))
17
+ (= a1 a2))
18
+ ; one is number while the other is not
19
+ ((or (number? a1) (number? a2))
20
+ #f )
21
+ (else (eq? a1 a2))))
22
+
23
+ (define (eqlist? l1 l2 )
24
+ (cond ((and (null? l1) (null? l2)) #t )
25
+ ((or (null? l1) (null? l2)) #f )
26
+ (else
27
+ (and (myequal? (car l1)
28
+ (car l2))
29
+ (eqlist? (cdr l1)
30
+ (cdr l2))))))
31
+
32
+ (define (myequal? s1 s2 )
33
+ (cond ((and (atom? s1) (atom? s2))
34
+ (eqan? s1 s2))
35
+ ((or (atom? s1) (atom? s2)) #f )
36
+ (else (eqlist? s1 s2))))
37
+
38
+
39
+ (define rember
40
+ (lambda (s l )
41
+ (cond ((null? l) '() )
42
+ ((myequal? s (car l))
43
+ (cdr l))
44
+ (else
45
+ (cons (car l)
46
+ (rember s
47
+ (cdr l)))))))
48
+
49
+ (define insertL*
50
+ (lambda (new old l )
51
+ (cond ((null? l) '() )
52
+ ((myequal? old (car l))
53
+ (cons new old (insertL* new old (cdr l))))
54
+ ((list? (car l))
55
+ (cons (insertL* new old (car l))
56
+ (insertL* new old (cdr l))))
57
+ (else
58
+ (cons (car l)
59
+ (insertL* new old (cdr l)))))))
60
+
61
+ (define (test-insertL* )
62
+ (println (insertL* 'a 'b ' (a b c))))
63
+
64
+
You can’t perform that action at this time.
0 commit comments