X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=prelude.js;h=b934132bfb9374a032fd4cb5ce020f7adb824f94;hb=3d960988cd3719466c60221eaa4df888e47b5d0e;hp=dab0484bbf740e924bff2d8632125c265968436e;hpb=69e2c35ff134e83845c79f77032259cc92890ce8;p=jscl.git diff --git a/prelude.js b/prelude.js index dab0484..b934132 100644 --- a/prelude.js +++ b/prelude.js @@ -1,4 +1,6 @@ -function pv (x) { return x ; } +var nil; + +function pv (x) { return x==undefined? nil: x; } function mv(){ var r = []; @@ -8,6 +10,10 @@ function mv(){ return r; } +function forcemv (x) { + return typeof x == 'object' && 'multiple-value' in x? x: mv(x); +} + // NOTE: Define VALUES to be MV for toplevel forms. It is because // `eval' compiles the forms and execute the Javascript code at // toplevel with `js-eval', so it is necessary to return multiple @@ -21,3 +27,22 @@ function checkArgsAtLeast(args, n){ function checkArgsAtMost(args, n){ if (args.length > n) throw 'too many arguments'; } + +function checkArgs(args, n){ + checkArgsAtLeast(args, n); + checkArgsAtMost(args, n); +} + +// Improper list constructor (like LIST*) +function QIList(){ + if (arguments.length == 1) + return arguments[0]; + else { + var i = arguments.length-1; + var r = arguments[i--]; + for (; i>=0; i--){ + r = {car: arguments[i], cdr: r}; + } + return r; + } +}