Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
Defines a JSON-like algebraic data type:
type json =
| JNull
| JBool of bool
| JInt of int
| JStr of string
| JList of json list
Recursively serialises to a string via match-on-constructor, then
measures the length:
JList [JInt 1; JBool true; JNull; JStr 'hi'; JList [JInt 2; JInt 3]]
-> '[1,true,null,"hi",[2,3]]' length 24
Exercises:
- five-constructor ADT (one nullary, three single-arg, one list-arg)
- recursive match
- String.concat ',' (List.map to_string xs)
- string-cat with embedded escaped quotes
34 baseline programs total.
21 lines
448 B
OCaml
21 lines
448 B
OCaml
type json =
|
|
| JNull
|
|
| JBool of bool
|
|
| JInt of int
|
|
| JStr of string
|
|
| JList of json list
|
|
|
|
let rec to_string j =
|
|
match j with
|
|
| JNull -> "null"
|
|
| JBool b -> if b then "true" else "false"
|
|
| JInt n -> string_of_int n
|
|
| JStr s -> "\"" ^ s ^ "\""
|
|
| JList xs ->
|
|
"[" ^ String.concat "," (List.map to_string xs) ^ "]"
|
|
|
|
;;
|
|
|
|
let j = JList [JInt 1; JBool true; JNull; JStr "hi"; JList [JInt 2; JInt 3]] in
|
|
String.length (to_string j)
|