83216083883a1cfce50feec3ede7014813e777e0
[jscl.git] / prelude.js
1 var nil;
2
3 function pv (x) { return x==undefined? nil: x; }
4
5 function mv(){
6     var r = [];
7     r['multiple-value'] = true;
8     for (var i=0; i<arguments.length; i++)
9         r.push(arguments[i]);
10     return r;
11 }
12
13 // NOTE: Define VALUES to be MV for toplevel forms. It is because
14 // `eval' compiles the forms and execute the Javascript code at
15 // toplevel with `js-eval', so it is necessary to return multiple
16 // values from the eval function.
17 var values = mv;
18
19 function checkArgsAtLeast(args, n){
20     if (args.length < n) throw 'too few arguments';
21 }
22
23 function checkArgsAtMost(args, n){
24     if (args.length > n) throw 'too many arguments';
25 }
26
27 function checkArgs(args, n){
28     checkArgsAtLeast(args, n);
29     checkArgsAtMost(args, n);
30 }
31
32 // Improper list constructor (like LIST*)
33 function QIList(){
34     if (arguments.length == 1)
35         return arguments[0];
36     else {
37         var i = arguments.length-1;
38         var r = arguments[i--];
39         for (; i>=0; i--){
40             r = {car: arguments[i], cdr: r};
41         }
42         return r;
43     }
44 }