Skip to content

Instantly share code, notes, and snippets.

@saadshahd
Created August 11, 2025 14:36
Show Gist options
  • Save saadshahd/d468f545bbdcd2e9dc809057c5f083d7 to your computer and use it in GitHub Desktop.
Save saadshahd/d468f545bbdcd2e9dc809057c5f083d7 to your computer and use it in GitHub Desktop.
McCarthy's eval in modern FP terms - python
def eval(expr, env):
return match expr:
case Atom(x): Success(lookup(env, x))
case List(['quote', x]): Success(x)
case List(['if', cond, then, else_]):
eval(cond, env).flatmap(
lambda v: eval(then if v else else_, env)
)
case List([fn, *args]):
eval(fn, env).flatmap(
lambda f: traverse(args, lambda a: eval(a, env))
.flatmap(lambda vals: apply(f, vals))
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment