1
1
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:
Joel Martin 2015-12-18 13:29:08 -06:00
commit 27dfab373a
6 changed files with 48 additions and 12 deletions

View File

@ -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) ->

View File

@ -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

View File

@ -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)

View File

@ -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>"

View File

@ -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)

View File

@ -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