2020-01-05 16:36:06 +03:00
|
|
|
# {key: string, value: {kkind: kind, value: value}} -> [{kind: value.kkind, value: key}, value.value]
|
|
|
|
def _reconstruct_hash:
|
|
|
|
map([{
|
|
|
|
kind: .value.kkind,
|
|
|
|
value: .key
|
|
|
|
},
|
|
|
|
.value.value]);
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
def pr_str(env; opt):
|
2020-01-05 14:02:39 +03:00
|
|
|
(select(.kind == "symbol") | .value) //
|
2020-01-10 09:01:00 +03:00
|
|
|
(select(.kind == "string") | .value | if opt.readable then tojson else . end) //
|
2020-01-05 14:02:39 +03:00
|
|
|
(select(.kind == "keyword") | ":\(.value)") //
|
|
|
|
(select(.kind == "number") | .value | tostring) //
|
2020-01-10 09:01:00 +03:00
|
|
|
(select(.kind == "list") | .value | map(pr_str(env; opt)) | join(" ") | "(\(.))") //
|
|
|
|
(select(.kind == "vector") | .value | map(pr_str(env; opt)) | join(" ") | "[\(.)]") //
|
|
|
|
(select(.kind == "hashmap") | .value | to_entries | _reconstruct_hash | add // [] | map(pr_str(env; opt)) | join(" ") | "{\(.)}") //
|
2020-01-05 14:02:39 +03:00
|
|
|
(select(.kind == "nil") | "nil") //
|
|
|
|
(select(.kind == "true") | "true") //
|
|
|
|
(select(.kind == "false") | "false") //
|
2020-01-09 19:07:24 +03:00
|
|
|
(select(.kind == "fn") | "#<fn \(.function)>") //
|
2020-01-06 02:40:03 +03:00
|
|
|
(select(.kind == "function")| "#<function \([":anon"] + .names | join(", "))>") //
|
2020-01-10 09:01:00 +03:00
|
|
|
(select(.kind == "atom") | "(atom \(env.atoms[.identity] | pr_str(env; opt)))") //
|
2020-01-05 22:59:12 +03:00
|
|
|
"#<Unknown \(.kind) in \(.)>";
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
def pr_str(env):
|
|
|
|
pr_str(env; {readable: true});
|
|
|
|
|
2020-01-05 22:59:12 +03:00
|
|
|
def pr_str:
|
2020-01-10 09:01:00 +03:00
|
|
|
pr_str(null); # for stepX where X<6
|