Eval optimization! Tests for demos

This commit is contained in:
2025-01-25 09:18:13 -06:00
committed by James Eversole
parent 3175132eec
commit 00cdeca280
6 changed files with 70 additions and 45 deletions

View File

@ -4,7 +4,7 @@
-- NOTICE: This demo relies on tricu base library functions
--
-- We model labelled binary trees as sublists where values act as labels. We
-- require explicit notation of empty nodes. Empty nodes can be represented
-- require explicit not?ation of empty nodes. Empty nodes can be represented
-- with an empty list, `[]`, which is equivalent to a single node `t`.
--
-- Example tree inputs:
@ -19,33 +19,33 @@
label = (\node : head node)
left = (\node : if (emptyList node)
left = (\node : if (emptyList? node)
[]
(if (emptyList (tail node))
(if (emptyList? (tail node))
[]
(head (tail node))))
right = (\node : if (emptyList node)
right = (\node : if (emptyList? node)
[]
(if (emptyList (tail node))
(if (emptyList? (tail node))
[]
(if (emptyList (tail (tail node)))
(if (emptyList? (tail (tail node)))
[]
(head (tail (tail node))))))
processLevel = y (\self queue : if (emptyList queue)
processLevel = y (\self queue : if (emptyList? queue)
[]
(pair (map label queue) (self (filter
(\node : not (emptyList node))
(\node : not? (emptyList? node))
(lconcat (map left queue) (map right queue))))))
levelOrderTraversal_ = (\a : processLevel (t a t))
toLineString = y (\self levels : if (emptyList levels)
toLineString = y (\self levels : if (emptyList? levels)
""
(lconcat
(lconcat (map (\x : lconcat x " ") (head levels)) "")
(if (emptyList (tail levels)) "" (lconcat (t (t 10 t) t) (self (tail levels))))))
(if (emptyList? (tail levels)) "" (lconcat (t (t 10 t) t) (self (tail levels))))))
levelOrderToString = (\s : toLineString (levelOrderTraversal_ s))