From 3e127081a459920971a966769495fd5037272265 Mon Sep 17 00:00:00 2001 From: Vasilij Schneidermann Date: Wed, 26 Oct 2016 00:11:33 +0200 Subject: [PATCH] Add interop and tests --- pil/core.l | 14 +++++++++++++- pil/tests/stepA_mal.mal | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 pil/tests/stepA_mal.mal diff --git a/pil/core.l b/pil/core.l index 30bb6974..5a22963b 100644 --- a/pil/core.l +++ b/pil/core.l @@ -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))))))) ) ) diff --git a/pil/tests/stepA_mal.mal b/pil/tests/stepA_mal.mal new file mode 100644 index 00000000..562c5703 --- /dev/null +++ b/pil/tests/stepA_mal.mal @@ -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