Here are some [[Alisp:About | ALisp ]] code examples:
Data types (with quote apostrophe where necessary to prevent evaluation):
Pair: '(1 . 2)
List: '(1 2 3) == (1 . (2 . (3 . ())))
Improper list: '(1 2 . 3) == (1 . (2 . 3))
Vector: #(1 2 3)
String: "1 2 3"
Symbol: 'FrontierSpace
Integer: 1
Float: .3
Basic functional programming:
(+ 1 2 3) == 6
(* (+ 2 4) 3) == 18
(let ((x 1) (y 2)) (list x y)) == (1 2)
(define f (lambda (x) (* x x x))) == f
(f 3) == 27
(define g (lambda (&rest args) (length args))) == g
(g 1 2 3) == 3
(member 2 '(1 2 3)) == (2 3)
Recursive programming:
(define fact (lambda (x)
(cond ((<= x 1) 1)
(#t (* x (fact (- x 1))))))) == fact
(fact 4) == 24
Macros:
(define ifelse (macro test tcode &opt fcode)
`(cond (,test ,tcode)
(#t ,fcode)))) == ifelse
(define value #f) == value
(ifelse #t
(set value "True")
(set value "False")) == value
value == "True"
(define when (macro (test &rest body)
`(cond (,test ,@body))) == when
(when #t
(set value "Unknown")
(set value "Done")) == value
value == "Done"
Lexical closures:
(let ((x 0))
(define inc (lambda () (set x (+ x 1)) x))
(define rst (lambda () (set x 0) x))) == rst
(inc) == 1
(inc) == 2
(rst) == 0
(inc) == 1
x == Exception: Undefined symbol
The map operator:
(map length '(() #(1 2) (3 4 5))) == (0 2 3)
(map (lambda (x) (apply + x)) '(() (2 3) (5 7 9))) == (0 5 21)
The compiler:
(define f-interpreted (lambda (x) (* x x))) == f-interpreted
f-interpreted == #
(define f (compile f-interpreted)) == f
f == #
(define f (compile f-interpreted 'f)) == f
f == #
(format "~I" (disassemble f)) ==
"((create-frame 1)
(load-argument 0)
(save-to-frame 0)
(create-argument-vector 2)
(load-from-frame 0)
(save-to-argument-vector 0)
(load-from-frame 0)
(save-to-argument-vector 1)
(load-object #)
(apply)
(free-argument-vector))"
(define g-interpreted (lambda (x) (lambda (y) (+ x y)))) == g-interpreted
(g-interpreted 0) == #
(define g (compile g-interpreted 'g)) == g
(g 0) == #