Skip to content

Instantly share code, notes, and snippets.

@no-defun-allowed
Created January 23, 2022 09:04
Show Gist options
  • Save no-defun-allowed/648e3e6956f55d9c221548b1314fc8db to your computer and use it in GitHub Desktop.
Save no-defun-allowed/648e3e6956f55d9c221548b1314fc8db to your computer and use it in GitHub Desktop.
A busy beaver in Scheme macros
(define-syntax beaver
(syntax-rules [a b c d quote]
[(beaver lefts 0 rights 'a)
(right lefts 1 rights 'b)]
[(beaver lefts 0 rights 'b)
(left lefts 1 rights 'a)]
[(beaver '(lefts ...) 0 '(rights ...) 'c)
'(lefts ... 1 rights ...)]
[(beaver lefts 0 rights 'd)
(right lefts 1 rights 'd)]
[(beaver lefts 1 rights 'a)
(left lefts 1 rights 'b)]
[(beaver lefts 1 rights 'b)
(left lefts 0 rights 'c)]
[(beaver lefts 1 rights 'c)
(left lefts 1 rights 'd)]
[(beaver lefts 1 rights 'd)
(right lefts 0 rights 'a)]))
(define-syntax left
(syntax-rules [quote]
[(left '(l lefts ...) new '(rights ...) next)
(beaver '(lefts ...) l '(new rights ...) next)]
[(left '() new '(rights ...) next)
(beaver '() 0 '(new rights ...) next)]))
(define-syntax right
(syntax-rules [quote]
[(right '(lefts ...) new '(r rights ...) next)
(beaver '(new lefts ...) r '(rights ...) next)]
[(right '(lefts ...) new '() next)
(beaver '(new lefts ...) 0 '() next)]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment