adding member

This commit is contained in:
Danny Yoo 2011-04-13 13:45:35 -04:00
parent c78f6018be
commit f43f43f2b1
2 changed files with 39 additions and 2 deletions

View File

@ -788,6 +788,14 @@
Primitives['equal?'] = function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2];
return isEqual(firstArg, secondArg);
};
Primitives['equal?'].arity = 2;
Primitives['equal?'].displayName = 'equal?';
var isEqual = function(firstArg, secondArg) {
var lset = [firstArg], rset = [secondArg];
while (lset.length !== 0 && rset.length !== 0) {
var lhs = lset.pop();
@ -807,10 +815,29 @@
}
return true;
};
Primitives['equal?'].arity = 2;
Primitives['equal?'].displayName = 'equal?';
Primitives['member'] = function(MACHINE, arity) {
var x = MACHINE.env[MACHINE.env.length-1];
var lst = MACHINE.env[MACHINE.env.length-2];
var originalLst = lst;
while (true) {
if (! isList(lst)) {
raise(new Error("member: expected list"
+ " as argument #2"
+ " but received " + originalLst + " instead"));
};
if (lst === NULL) {
return false;
}
if (isEqual(x, (lst[0]))) {
return lst;
}
lst = lst[1];
}
};
Primitives['member'].arity = 2;
Primitives['member'].displayName = 'member';
// recomputeGas: state number -> number
@ -899,6 +926,7 @@
exports['isVector'] = isVector;
exports['isOutputPort'] = isOutputPort;
exports['isOutputStringPort'] = isOutputStringPort;
exports['isEqual'] = isEqual;
exports['ArityAtLeast'] = ArityAtLeast;
exports['isArityMatching'] = isArityMatching;

View File

@ -325,5 +325,14 @@ EOF
"Error: Expected number as argument 1 but received foo")
(test '(for-each displayln (member 5 '(1 2 5 4 3)))
"5\n4\n3\n")
(test '(displayln (member 6 '(1 2 5 4 3)))
"false\n")
#;(test (read (open-input-file "tests/conform/program0.sch"))
(port->string (open-input-file "tests/conform/expected0.txt")))