1
1
mirror of https://github.com/kanaka/mal.git synced 2024-11-13 11:23:59 +03:00
mal/forth/tests/stepA_mal.mal
Joel Martin 90f618cbe7 All: rename stepA_interop to stepA_mal
Also, add missed postscript interop tests.
2015-02-28 11:09:54 -06:00

42 lines
992 B
Plaintext

;; Basic interop
(. 5 'MalInt.)
;=>5
(. 11 31 '+ 'MalInt.)
;=>42
(. "greetings" 'MalString.)
;=>"greetings"
(. "hello" 'type 'cr 'mal-nil)
; hello
;=>nil
;; Interop on non-literals
(. (+ 15 27) 'MalInt.)
;=>42
(let* [a 17] (. a 25 '+ 'MalInt.))
;=>42
(let* [a "hello"] (. a 1 '- 'MalString.))
;=>"hell"
;; Use of annoyingly-named forth words
(. 1 'MalInt. (symbol ",") 'here (symbol "@"))
;=>1
(let* (i 'MalInt.) (. 5 i))
;=>5
(let* (comma (symbol ",") fetch (symbol "@")) (. 'here 42 'MalInt. comma fetch))
;=>42
;; Multiple .-forms interacting via heap memory and mal locals
(def! string-parts (fn* (s) (. s 'MalInt. 'swap 'MalInt. 'here '-rot (symbol ",") (symbol ",") 'here>MalList)))
(first (rest (string-parts "sketchy")))
;=>7
(def! prn-chars (fn* (start count) (if (> count 0) (do (prn (. start 1 'MalString.)) (prn-chars (+ start 1) (- count 1))))))
(let* (msg (string-parts "sketchy")) (prn-chars (first msg) (first (rest msg))))
; "s"
; "k"
; "e"
; "t"
; "c"
; "h"
; "y"
;=>nil