mirror of
https://github.com/kanaka/mal.git
synced 2024-09-21 18:48:12 +03:00
Merge commit '069f90b'
This commit is contained in:
commit
27dfab373a
@ -41,13 +41,11 @@ pr_list(Seq, Start, End, Join, Readably) ->
|
||||
Start ++ L ++ End.
|
||||
|
||||
pr_map(Map, Readably) ->
|
||||
PrintKV = fun({Key, Value}) ->
|
||||
KS = pr_str(Key, Readably),
|
||||
VS = pr_str(Value, Readably),
|
||||
KS ++ " " ++ VS
|
||||
AppendKV = fun({Key, Value}, AccIn) ->
|
||||
AccIn ++ [Key, Value]
|
||||
end,
|
||||
L = string:join(lists:map(PrintKV, maps:to_list(Map)), " "),
|
||||
io_lib:format("{~s}", [L]).
|
||||
Elements = lists:foldl(AppendKV, [], maps:to_list(Map)),
|
||||
pr_list(Elements, "{", "}", " ", Readably).
|
||||
|
||||
escape_str(String) ->
|
||||
Escape = fun(C, AccIn) ->
|
||||
|
@ -58,7 +58,7 @@ MalMap
|
||||
list MalList/start @ { start }
|
||||
start @ pr-buf a-space start cell+ @ pr-buf
|
||||
count 2 / 1 ?do
|
||||
s" , " str-append
|
||||
a-space
|
||||
start i 2 * cells + @ pr-buf a-space
|
||||
start i 2 * 1+ cells + @ pr-buf
|
||||
loop
|
||||
|
@ -25,7 +25,7 @@
|
||||
(string-join
|
||||
(hash-map->list
|
||||
(lambda (k v)
|
||||
(format #f "~a ~a" (pr_str k #t) (pr_str v #t)))
|
||||
(format #f "~a ~a" (p k) (p v)))
|
||||
hm)
|
||||
" ")
|
||||
port)
|
||||
|
@ -31,7 +31,7 @@ let rec pr_str mal_obj print_readably =
|
||||
| T.Vector { T.value = xs } ->
|
||||
"[" ^ (String.concat " " (List.map (fun s -> pr_str s r) xs)) ^ "]"
|
||||
| T.Map { T.value = xs } ->
|
||||
"{" ^ (Types.MalMap.fold (fun k v s -> s ^ (if s = "" then "" else ", ") ^ (pr_str k r)
|
||||
"{" ^ (Types.MalMap.fold (fun k v s -> s ^ (if s = "" then "" else " ") ^ (pr_str k r)
|
||||
^ " " ^ (pr_str v r)) xs "")
|
||||
^ "}"
|
||||
| T.Fn f -> "#<fn>"
|
||||
|
@ -269,12 +269,20 @@ a
|
||||
(pr-str (list 1 2 "abc" "\"") "def")
|
||||
;=>"(1 2 \"abc\" \"\\\"\") \"def\""
|
||||
|
||||
(pr-str [1 2 "abc" "\""] "def")
|
||||
;=>"[1 2 \"abc\" \"\\\"\"] \"def\""
|
||||
|
||||
(pr-str "abc\ndef\nghi")
|
||||
;=>"\"abc\\ndef\\nghi\""
|
||||
|
||||
(pr-str "abc\\def\\ghi")
|
||||
;=>"\"abc\\\\def\\\\ghi\""
|
||||
|
||||
(pr-str (list))
|
||||
;=>"()"
|
||||
|
||||
(pr-str [])
|
||||
;=>"[]"
|
||||
|
||||
;; Testing str
|
||||
|
||||
@ -302,10 +310,17 @@ a
|
||||
(str "abc\\def\\ghi")
|
||||
;=>"abc\\def\\ghi"
|
||||
|
||||
;;; TODO: get this working properly
|
||||
;;;(str (list 1 2 "abc" "\"") "def")
|
||||
;;;;=>"(1 2 \"abc\" \"\\\"\")def"
|
||||
(str (list 1 2 "abc" "\"") "def")
|
||||
;=>"(1 2 abc \")def"
|
||||
|
||||
(str [1 2 "abc" "\""] "def")
|
||||
;=>"[1 2 abc \"]def"
|
||||
|
||||
(str (list))
|
||||
;=>"()"
|
||||
|
||||
(str [])
|
||||
;=>"[]"
|
||||
|
||||
;; Testing prn
|
||||
(prn)
|
||||
|
@ -268,6 +268,29 @@
|
||||
(dissoc {:cde nil :fgh 456} :cde)
|
||||
;=>{:fgh 456}
|
||||
|
||||
;;
|
||||
;; Additional str and pr-str tests
|
||||
|
||||
(str "A" {:abc "val"} "Z")
|
||||
;=>"A{:abc val}Z"
|
||||
|
||||
(str true "." false "." nil "." :keyw "." 'symb)
|
||||
;=>"true.false.nil.:keyw.symb"
|
||||
|
||||
(pr-str "A" {:abc "val"} "Z")
|
||||
;=>"\"A\" {:abc \"val\"} \"Z\""
|
||||
|
||||
(pr-str true "." false "." nil "." :keyw "." 'symb)
|
||||
;=>"true \".\" false \".\" nil \".\" :keyw \".\" symb"
|
||||
|
||||
(def! s (str {:abc "val1" :def "val2"}))
|
||||
(or (= s "{:abc val1 :def val2}") (= s "{:def val2 :abc val1}"))
|
||||
;=>true
|
||||
|
||||
(def! p (pr-str {:abc "val1" :def "val2"}))
|
||||
(or (= p "{:abc \"val1\" :def \"val2\"}") (= p "{:def \"val2\" :abc \"val1\"}"))
|
||||
;=>true
|
||||
|
||||
;; ------- Optional Functionality --------------
|
||||
;; ------- (Not needed for self-hosting) -------
|
||||
;>>> soft=True
|
||||
|
Loading…
Reference in New Issue
Block a user