-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstdlib.scm
20 lines (20 loc) · 1.52 KB
/
stdlib.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(begin
(define null? (lua-lambda "return args[2] == nil"))
(define exit (lua-lambda "os.exit()"))
(define list (lua-lambda "local acc_ = {args[2]}; local acc = acc_; for i = 3,#args do acc[2] = {args[3]}; acc = acc[2] end; return acc_"))
(define cons (lua-lambda "return {args[2],args[3]}"))
(define car (lua-lambda "return args[2][1]"))
(define cdr (lua-lambda "return args[2][2]"))
(define + (lua-lambda "local acc = args[2]; for i = 3, #args do acc = acc + args[i] end; return acc" ))
(define - (lua-lambda "local acc = args[2]; for i = 3, #args do acc = acc - args[i] end; return acc" ))
(define / (lua-lambda "local acc = args[2]; for i = 3, #args do acc = acc / args[i] end; return acc" ))
(define * (lua-lambda "local acc = args[2]; for i = 3, #args do acc = acc * args[i] end; return acc" ))
(define < (lua-lambda "for i = 2, #args-1 do if args[i] >= args[i+1] then return false end end; return true" ))
(define <= (lua-lambda "for i = 2, #args-1 do if args[i] < args[i+1] then return false end end; return true" ))
(define > (lua-lambda "for i = 2, #args-1 do if args[i] <= args[i+1] then return false end end; return true" ))
(define >= (lua-lambda "for i = 2, #args-1 do if args[i] > args[i+1] then return false end end; return true" ))
(define = (lua-lambda "for i = 2, #args-1 do if args[i] ~= args[i+1] then return false end end; return true" ))
(define display (lua-lambda "print(unpack(args,2))"))
(define newline (lua-lambda "print()"))
(define format (lua-lambda "return string.format( args[2], unpack( args, 3 ))"))
)