# bruijn collatz.bruijn
# fun collatz implementation using binary abstract machine
:import std/Combinator .
:import std/Number/Binary .
# TODO: add String → Binary function for reading from stdin
start (+01189998819991197253b)
collatz [z [[rec]] (=²?0 ≠²!(/²0) 0)] ⧗ Binary → Boolean
≠²!‣ z [[=²?0 (1 /²0) 0]]
rec (0 =? (+1b)) case-end case-rec
case-rec 1 ≠²!(↑¹0 + 0)
case-end [[1]]
main [collatz start]