1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-20 01:57:09 +03:00

Add interop and tests

This commit is contained in:
Vasilij Schneidermann 2016-10-26 00:11:33 +02:00
parent b6263859a9
commit 3e127081a4
2 changed files with 30 additions and 1 deletions

View File

@ -89,6 +89,16 @@
(maps '((C) (put X* (cdr C) (car C))) X)
X* ) )
(de pil-to-mal (X)
(cond
((not X) *MAL-nil)
((=T X) *MAL-true)
((num? X) (MAL-number X))
((str? X) (MAL-string X))
((sym? X) (MAL-symbol X))
((lst? X) (MAL-list (mapcar pil-to-mal X)))
(T (MAL-string (sym X))) ) )
(def '*Ns
'((+ . `(MAL-fn '((A B) (MAL-number (+ (MAL-value A) (MAL-value B))))))
(- . `(MAL-fn '((A B) (MAL-number (- (MAL-value A) (MAL-value B))))))
@ -161,4 +171,6 @@
(readline . `(MAL-fn '((Prompt) (let Output (readline (MAL-value Prompt)) (if (=0 Output) NIL (MAL-string Output))))))
(time-ms . `(MAL-fn '(() (MAL-number (/ (usec) 1000)))))
(conj . `(MAL-fn MAL-conj))
(seq . `(MAL-fn MAL-seq)) ) )
(seq . `(MAL-fn MAL-seq))
(pil-eval . `(MAL-fn '((Input) (pil-to-mal (run (str (MAL-value Input))))))) ) )

17
pil/tests/stepA_mal.mal Normal file
View File

@ -0,0 +1,17 @@
;; Testing basic pil interop
(pil-eval "T")
;=>true
(pil-eval "NIL")
;=>nil
(pil-eval "(+ 1 1)")
;=>2
(pil-eval "(cons 1 2 3 NIL)")
;=>(1 2 3)
(pil-eval "(use (@A @O) (match '(@A and @O) '(Alpha and Omega)) (prinl @A) (prinl @O))")
Alpha
Omega