diff options
| author | bozo.kopic <bozo@kopic.xyz> | 2022-08-02 01:20:12 +0200 |
|---|---|---|
| committer | bozo.kopic <bozo@kopic.xyz> | 2022-09-25 02:40:23 +0200 |
| commit | 288727f09a1b3458c268497d111349e608c3f9fa (patch) | |
| tree | d62565249fa3c7127856c65405752572fc41aca9 /src_lsp | |
Diffstat (limited to 'src_lsp')
| -rw-r--r-- | src_lsp/base-large.lsp | 117 | ||||
| -rw-r--r-- | src_lsp/base-small.lsp | 6 |
2 files changed, 123 insertions, 0 deletions
diff --git a/src_lsp/base-large.lsp b/src_lsp/base-large.lsp new file mode 100644 index 0000000..e3666d7 --- /dev/null +++ b/src_lsp/base-large.lsp @@ -0,0 +1,117 @@ + +(define nil ()) +(define #f 0) +(define #t 1) + +(define list (lambda x x)) + +(define car + (lambda (x) + (apply (lambda (x . rest) x) x))) + +(define cdr + (lambda (x) + (apply (lambda (x . rest) rest) x))) + +((lambda (define*) + (set! define + (syntax (head . rest) + (if (pair? head) + (list begin + (list define* (car head) nil) + (list set! (car head) + (cons lambda (cons (cdr head) rest)))) + (cons define* (cons head rest)))))) + define) + +(define (cadr x) (car (cdr x))) +(define (caar x) (car (car x))) +(define (cdar x) (cdr (car x))) +(define (cadar x) (car (cdr (car x)))) + +(define define-syntax + (syntax (head . rest) + (list begin + (list define (car head) nil) + (list set! (car head) + (cons syntax (cons (cdr head) rest)))))) + +(define (not x) (if x #f #t)) + +(define-syntax (and . args) + (if args + (list if (car args) + (cons and (cdr args)) + #f) + #t)) + +(define-syntax (or . args) + (if args + (list if (car args) + #t + (cons or (cdr args))) + #f)) + +(define (= . args) + (if args + (if (number? (car args)) + (or (not (cdr args)) + (and (eq? (car args) (cadr args)) + (apply = (cdr args)))) + #f) + #t)) + +(define (<= . args) + (if args + (if (number? (car args)) + (if (cdr args) + (and (or (= (car args) (cadr args)) + (< (car args) (cadr args))) + (apply <= (cdr args))) + #t) + #f) + #t)) + +(define (>= . args) + (if args + (if (number? (car args)) + (if (cdr args) + (and (or (= (car args) (cadr args)) + (> (car args) (cadr args))) + (apply >= (cdr args))) + #t) + #f) + #t)) + +(define-syntax (when test . args) + (list if test + (cons begin args) + nil)) + +(define-syntax (cond . args) + (when args + (if (eq? (caar args) 'else) + (cons begin (cdar args)) + (list if (caar args) + (cons begin (cdar args)) + (cons cond (cdr args)))))) + +(define-syntax (let . args) + (define (let bindings . body) + (if bindings + (list + (list lambda (list (caar bindings)) + (apply let (cons (cdr bindings) body))) + (cadar bindings)) + (cons begin body))) + (apply let args)) + +(define (newline) (write-u8 10)) + +(define (write-string str) + (define len (string-length str)) + (define (write-from i) + (when (< i len) + (write-u8 (string-ref str i)) + (write-from (+ i 1)))) + (write-from 0)) diff --git a/src_lsp/base-small.lsp b/src_lsp/base-small.lsp new file mode 100644 index 0000000..f0e1e2c --- /dev/null +++ b/src_lsp/base-small.lsp @@ -0,0 +1,6 @@ + +(define nil ()) +(define #f 0) +(define #t 1) + +(define list (lambda x x)) |
