Merge branch 'master' into dom
This commit is contained in:
commit
a76cc2c262
|
@ -48,19 +48,20 @@
|
||||||
this.rest = rest;
|
this.rest = rest;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var makePair = function (first, rest) {
|
||||||
|
return new Cons(first, rest);
|
||||||
|
};
|
||||||
|
|
||||||
Cons.prototype.reverse = function () {
|
Cons.prototype.reverse = function () {
|
||||||
var lst = this;
|
var lst = this;
|
||||||
var ret = EMPTY;
|
var ret = EMPTY;
|
||||||
while (lst !== EMPTY) {
|
while (lst !== EMPTY) {
|
||||||
ret = Cons.makeInstance(lst.first, ret);
|
ret = makePair(lst.first, ret);
|
||||||
lst = lst.rest;
|
lst = lst.rest;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
Cons.makeInstance = function (first, rest) {
|
|
||||||
return new Cons(first, rest);
|
|
||||||
};
|
|
||||||
|
|
||||||
// FIXME: can we reduce the recursion on this?
|
// FIXME: can we reduce the recursion on this?
|
||||||
Cons.prototype.equals = function (other, aUnionFind) {
|
Cons.prototype.equals = function (other, aUnionFind) {
|
||||||
|
@ -82,7 +83,7 @@
|
||||||
var ret = b;
|
var ret = b;
|
||||||
var lst = this.reverse();
|
var lst = this.reverse();
|
||||||
while (lst !== EMPTY) {
|
while (lst !== EMPTY) {
|
||||||
ret = Cons.makeInstance(lst.first, ret);
|
ret = makePair(lst.first, ret);
|
||||||
lst = lst.rest;
|
lst = lst.rest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,19 +161,18 @@
|
||||||
var isEmpty = function (x) { return x === EMPTY; };
|
var isEmpty = function (x) { return x === EMPTY; };
|
||||||
|
|
||||||
|
|
||||||
var makePair = Cons.makeInstance;
|
|
||||||
|
|
||||||
var makeList = function () {
|
var makeList = function () {
|
||||||
var result = EMPTY, i;
|
var result = EMPTY, i;
|
||||||
for (i = arguments.length - 1; i >= 0; i--) {
|
for (i = arguments.length - 1; i >= 0; i--) {
|
||||||
result = Cons.makeInstance(arguments[i], result);
|
result = makePair(arguments[i], result);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Coerse a list back into a JavaScript array.
|
// Coerse a list back into a JavaScript array.
|
||||||
var listToArray = function(lst) {
|
var listToArray = function (lst) {
|
||||||
var result = [];
|
var result = [];
|
||||||
while (lst !== EMPTY) {
|
while (lst !== EMPTY) {
|
||||||
result.push(lst.first);
|
result.push(lst.first);
|
||||||
|
@ -185,14 +185,17 @@
|
||||||
// isList: Any -> Boolean
|
// isList: Any -> Boolean
|
||||||
// Returns true if x is a list (a chain of pairs terminated by EMPTY).
|
// Returns true if x is a list (a chain of pairs terminated by EMPTY).
|
||||||
var isList = function (x) {
|
var isList = function (x) {
|
||||||
while (x !== EMPTY) {
|
var tortoise, hare;
|
||||||
if (x instanceof Cons) {
|
tortoise = hare = x;
|
||||||
x = x.rest;
|
if (hare === EMPTY) { return true; }
|
||||||
} else {
|
while (true) {
|
||||||
return false;
|
if (!(hare instanceof Cons)) { return false; }
|
||||||
}
|
if (tortoise instanceof Cons) { tortoise = tortoise.rest; }
|
||||||
|
hare = hare.rest;
|
||||||
|
if (hare instanceof Cons) { hare = hare.rest; }
|
||||||
|
if (hare === EMPTY) { return true; }
|
||||||
|
if (tortoise === hare) { return false; }
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
Vector.prototype.toList = function () {
|
Vector.prototype.toList = function () {
|
||||||
var ret = baselib.lists.EMPTY, i;
|
var ret = baselib.lists.EMPTY, i;
|
||||||
for (i = this.length() - 1; i >= 0; i--) {
|
for (i = this.length() - 1; i >= 0; i--) {
|
||||||
ret = baselib.lists.Cons.makeInstance(this.elts[i], ret);
|
ret = baselib.lists.makePair(this.elts[i], ret);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
("hello" "world")
|
("hello" "world")
|
||||||
true
|
true
|
||||||
true
|
true
|
||||||
|
true
|
||||||
|
false
|
||||||
|
true
|
||||||
|
true
|
||||||
false
|
false
|
||||||
true
|
true
|
||||||
hello
|
hello
|
||||||
|
@ -19,3 +23,4 @@ true
|
||||||
false
|
false
|
||||||
false
|
false
|
||||||
true
|
true
|
||||||
|
(3 1 4)
|
||||||
|
|
|
@ -3,6 +3,11 @@
|
||||||
'(1 2 3)
|
'(1 2 3)
|
||||||
(list "hello" "world")
|
(list "hello" "world")
|
||||||
|
|
||||||
|
(list? empty)
|
||||||
|
(list? '(1))
|
||||||
|
(list? '(1 2))
|
||||||
|
(list? 1)
|
||||||
|
|
||||||
(empty? empty)
|
(empty? empty)
|
||||||
(empty? '())
|
(empty? '())
|
||||||
(cons? '())
|
(cons? '())
|
||||||
|
@ -24,3 +29,6 @@
|
||||||
(ormap even? '(5))
|
(ormap even? '(5))
|
||||||
(ormap even? '(1 3 5 7))
|
(ormap even? '(1 3 5 7))
|
||||||
(ormap even? '(1 3 8 7))
|
(ormap even? '(1 3 8 7))
|
||||||
|
|
||||||
|
|
||||||
|
(vector->list #(3 1 4))
|
||||||
|
|
|
@ -22,3 +22,5 @@ jill
|
||||||
jane
|
jane
|
||||||
|
|
||||||
|
|
||||||
|
true
|
||||||
|
false
|
||||||
|
|
|
@ -71,3 +71,11 @@
|
||||||
(newline)
|
(newline)
|
||||||
(for-each displayln (map person-name (person-friends c)))
|
(for-each displayln (map person-name (person-friends c)))
|
||||||
(newline))
|
(newline))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Make sure cyclic lists are treated correctly by list?
|
||||||
|
(shared ([a (cons 1 a)])
|
||||||
|
(begin
|
||||||
|
(displayln (pair? a))
|
||||||
|
(displayln (list? a))))
|
Loading…
Reference in New Issue
Block a user