-
Notifications
You must be signed in to change notification settings - Fork 0
/
solutions-c3.js
88 lines (79 loc) · 2.24 KB
/
solutions-c3.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//CHAPTER THREE
lilJSter = _ = extendAndWrap(lilJSter, {
rember : function (a,l) {
return isNull(l) ? null :
isEq(a,car(l)) ? cdr(l) :
/*ELSE*/ cons(car(l), _.rember(a,cdr(l)));
},
firsts : function (l) {
return isNull(l) ? null :
/*ELSE*/ cons(car(car(l)), _.firsts(cdr(l)));
},
insertR : function (n,o,l) {//As in book
return isNull(l) ? null :
isEq(car(l), o) ?
cons(o, cons(n,cdr(l))) :
/*ELSE*/ cons(car(l), _.insertR(n,o,cdr(l)));
},
insertL : function (n,o,l) { //As in book
return isNull(l) ? null :
isEq(car(l), o) ?
cons(n, cons(o,cdr(l))) :
/*ELSE*/ cons(car(l), _.insertL(n,o,cdr(l)));
},
insertLmod : function (n,o,l) { //As modified in book -- (cons new lat)
return isNull(l) ? null :
isEq(car(l), o) ?
cons(n, l) :
/*ELSE*/ cons(car(l), _.insertLmod(n,o,cdr(l)));
},
subst : function (n,o,l) {
return isNull(l) ? null :
isEq(car(l),o) ? cons(n, cdr(l)) :
/*ELSE*/ cons(car(l), _.subst(n,o,cdr(l)));
},
subst2 : function (n,o1,o2,l) { //As in book
return isNull(l) ? null :
isEq(car(l),o1) ?
cons(n, cdr(l)) :
isEq(car(l),o2) ?
cons(n, cdr(l)) :
/*ELSE*/ cons(car(l), _.subst2(n,o1,o2,cdr(l)));
},
subst2mod : function (n,o1,o2,l) { //As modified in book
return isNull(l) ? null :
isEq(car(l), o1) || isEq(car(l), o2) ?
cons(n, cdr(l)) :
/*ELSE*/ cons(car(l), _.subst2(n,o1,o2,cdr(l)));
},
multirember : function (a,l) {
return isNull(l) ? null :
isEq(a,car(l)) ?
_.multirember(a,cdr(l)) :
/*ELSE*/ cons(car(l),_.multirember(a,cdr(l)));
},
multiinsertR : function (n,o,l) {//As in book. NOTE: DC's version doesn't seem to work
return isNull(l) ? null :
isEq(car(l), o) ?
cons(o,
cons(n,
_.multiinsertR(n,o,cdr(l)))) :
/*ELSE*/ cons(car(l), _.multiinsertR(n,o,cdr(l)));
},
multiinsertL : function (n,o,l) { //As in book. NOTE: DC's version doesn't seem to work
return isNull(l) ? null :
isEq(car(l), o) ?
cons(n,
cons(o,
_.multiinsertL(n,o,cdr(l)))) :
/*ELSE*/ cons(car(l), _.multiinsertL(n,o,cdr(l)));
},
multisubst : function (n,o,l) {
return isNull(l) ? null :
isEq(car(l), o) ?
cons(n,
_.multisubst(n,o,cdr(l))) :
cons(car(l),
_.multisubst(n,o,cdr(l)));
}
});