Something like Lisp. I referred to Lisp interpreter in Rust and vishpat/lisp-rs. Thank you Vishal Patil.
// 2024/04/06
0.12.0-dev.3533+e5d900268
$ zig run src\main.zig
print arg
(print "foobar")
> "foobar"
define name value
(define pi 3.14)
(print pi)
> 3.14
begin element ...
(begin
(define a 1)
(define b 2)
(+ a b)
)
> 3
list element ...
(list 1 2 3 4 5)
> (1 2 3 4 5)
lambda args body
(define add (lambda (a b) (+ a b)))
(add 1 2)
> 3
let binds body
(begin
(let ((a 1) (b 2))
(+ a b)
)
)
> 3
map function list
(map (lambda (a) (+ a 10)) (list 1 2 3 4 5))
> (11 12 13 14 15)
filter function list
(begin
(define odd (lambda (v) (= 1 (% v 2))))
(define l (list 1 2 3 4 5))
(filter odd l)
)
> (1 3 5)
reduce function list
(begin
(define add (lambda (a b) (+ a b)))
(define l (list 1 2 4 8 16 32))
(reduce add l )
)
> 63
range (start end stride)
(range 0 11)
>(0 1 2 3 4 5 6 7 8 9 10)
(range 0 11 2)
>(0 2 4 6 8 10)
car list
(car (list 1 2 3))
>1
cdr list
(car (list 1 2 3))
>(2 3)
length list
(length (list 1 2 3))
>3
null? list
(null? (list 1 2 3 4 5))
>false
(null? (list))
>true