Skip to content

Instantly share code, notes, and snippets.

@cpressey
Created August 27, 2019 11:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cpressey/030883cadaf9a12a802cd6c95affc01e to your computer and use it in GitHub Desktop.
Save cpressey/030883cadaf9a12a802cd6c95affc01e to your computer and use it in GitHub Desktop.
How Haskell's infix $ operator might look in Scheme
(define reduce
(lambda (subject complete-rules rules generation-id)
(if (null? rules)
subject
(let* ((rule-pair (car rules))
(rest-of-rules (cdr rules))
(pattern (car rule-pair))
(replacements (cdr rule-pair))
(new-gen-id (+ generation-id 1))
(new-subject (apply-rule subject pattern replacements generation-id)))
(if new-subject
(reduce new-subject complete-rules complete-rules new-gen-id)
(reduce subject complete-rules rest-of-rules new-gen-id))))))
; ... BECOMES ...
(define reduce $
lambda (subject complete-rules rules generation-id) $
if (null? rules)
subject $
let* ((rule-pair $ car rules)
(rest-of-rules $ cdr rules)
(pattern $ car rule-pair)
(replacements $ cdr rule-pair)
(new-gen-id $ + generation-id 1)
(new-subject $ apply-rule subject pattern replacements generation-id)) $
if new-subject
(reduce new-subject complete-rules complete-rules new-gen-id) $
reduce subject complete-rules rest-of-rules new-gen-id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment