# Rust λ-calcul reference implementation This directory contains a reference implementation of a normal order semantics λ-calculus based language. Current syntax is based on S-expressions, ie. Lisp. There is a command-line interpreter for batch and interactive evaluation of input, and an embryonic tester daemon. # Tester **NOTE**: This is a work-in-progress, current tester is only capable of running program locally through a forked process The tester daemon is inspired by [Extreme Startup](https://github.com/rchatley/extreme_startup): It's a REST-ish server and client that allows to repeatedly send λ-terms to a remote execution engine and compare the result against its expectations. The interaction flow is simple: * The server listens on a well-known port * A client connects to this port and requests a test session (`POST /register`), giving a URL to callback, * The server returns an identification token, to passed to and from the client in subsequent calls, * Then the server repeatedly sends requests to the client (`POST /eval`) whose body is a S-expr representing a λ-term, and it expects an evaluation result. * Note the evaluation can return error if the term is syntactically malformed * The server waits at most 60 seconds for the answer * If the client fails to answer, or answers wrongly, the server keeps sending the same request * If the client's answer is correct, the server sends another term, more complex, to evaluate.