application/octet-stream
•
1.67 KB
•
91 lines
; Contains native nujel implementations of some
; core language constructs and essential macros
[defmacro comment [...body]
"Does nothing"
0
]
[defun not [v]
"Return true if V is false"
[if v #f #t]
]
[defun list [...arguments]
"Return ARGUMENTS as a list"
...arguments
]
[defun default [arg default-value]
"Returns ARG or DEFAULT-VALUE if ARG is #nil"
[if arg arg default-value]
]
[defun caar [p]
"[car [car p]]"
[car [car p]]
]
[defun cadr [p]
"[car [cdr p]]"
[car [cdr p]]
]
[defun cdar [p]
"[cdr [car p]]"
[cdr [car p]]
]
[defun cddr [p]
"[cdr [cdr p]]"
[cdr [cdr p]]
]
[defun cadar [p]
"[cdr [car p]]"
[car [cdr [car p]]]
]
[defun caddr [p]
"[car [cdr [cdr p]]]"
[car [cdr [cdr p]]]
]
[defun cdddr [p]
"[cdr [cdr [cdr p]]]"
[cdr [cdr [cdr p]]]
]
[defun cadddr [p]
"[car [cdr [cdr [cdr p]]]]"
[car [cdr [cdr [cdr p]]]]
]
[defun println [str]
"Print STR on a single line"
[print [cat str "\n"]]
]
[defmacro when-not [pred ...body]
"Evalutes to BODY if PRED is false"
`[if ,pred #nil [do ,@...body]]
]
[defmacro when [pred ...body]
"Evalutes to BODY if PRED is true"
`[if ,pred [do ,@...body] #nil]
]
[defun let/arg [arg]
`[def ,[car arg] ,[cadr arg]]
]
[defun let/args [args]
[if args
[cons [let/arg [car args]]
[let/args [cdr args]]]
#nil]
]
[defmacro let [bindings ...body]
"Evalutes to BODY if PRED is true"
`[let* [do ,@[let/args bindings] ,@...body]]
]