mirror of
https://github.com/kanaka/mal.git
synced 2024-11-13 11:23:59 +03:00
90f618cbe7
Also, add missed postscript interop tests.
42 lines
992 B
Plaintext
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
|