https://github.com/doccaico/lisp-zig
Lisp written in Zig/Ziglang
https://github.com/doccaico/lisp-zig
zig
Last synced: over 1 year ago
JSON representation
Lisp written in Zig/Ziglang
- Host: GitHub
- URL: https://github.com/doccaico/lisp-zig
- Owner: doccaico
- Created: 2024-04-02T00:21:19.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-06T07:13:19.000Z (about 2 years ago)
- Last Synced: 2025-01-06T11:38:36.305Z (over 1 year ago)
- Topics: zig
- Language: Zig
- Homepage:
- Size: 104 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Lisp-Zig (Tested on Windows only)
Something like Lisp. I referred to [Lisp interpreter in Rust](https://vishpat.github.io/lisp-rs/) and [vishpat/lisp-rs](https://github.com/vishpat/lisp-rs). Thank you Vishal Patil.
## Zig version
```
// 2024/04/06
0.12.0-dev.3533+e5d900268
```
## Usage
```
$ zig run src\main.zig
```
## Keywords
- print
```
print arg
(print "foobar")
> "foobar"
```
- define
```
define name value
(define pi 3.14)
(print pi)
> 3.14
```
- begin
```
begin element ...
(begin
(define a 1)
(define b 2)
(+ a b)
)
> 3
```
- list
```
list element ...
(list 1 2 3 4 5)
> (1 2 3 4 5)
```
- lambda
```
lambda args body
(define add (lambda (a b) (+ a b)))
(add 1 2)
> 3
```
- let
```
let binds body
(begin
(let ((a 1) (b 2))
(+ a b)
)
)
> 3
```
- map
```
map function list
(map (lambda (a) (+ a 10)) (list 1 2 3 4 5))
> (11 12 13 14 15)
```
- filter
```
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
```
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
```
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
```
car list
(car (list 1 2 3))
>1
```
- cdr
```
cdr list
(car (list 1 2 3))
>(2 3)
```
- length
```
length list
(length (list 1 2 3))
>3
```
- null?
```
null? list
(null? (list 1 2 3 4 5))
>false
(null? (list))
>true
```