Changeset [aa4f0a0fbe13d5ddaee85075421c916546d869e3] by Douglas Creager

November 17th, 2008 @ 11:21 PM

Lambdas now implemented using patterns

Lambda abstractions are now implemented using pattern matching. A lambda consists of a list of “clauses”, each of which contains a pattern and an expression. When you apply a lambda function to a value, we search for the first pattern in this list that matches the value. The corresponding expression is then used as the function body. The pattern match will create bindings for any identifiers contained in the pattern, and an environment containing these bindings is created to evaluate the lambda body in.

Currently there's no syntax (in either the Expression AST or the CSPM parser) for creating complex, multi-clause lambdas. Instead, the existing “\x @ «expression»” syntax creates a lambda with a single clause, and a tuple pattern of the lambda's formal parameters. Application creates a tuple value of the actual parameters to match against this pattern. http://github.com/hst/hst/commit...

Committed by Douglas Creager

  • M cspm/src/HST/CSPM/Evaluate.hs
  • M cspm/src/HST/CSPM/Patterns.lhs
  • M cspm/src/HST/CSPM/Types.hs
  • M cspm/tests/expressions/test-lambdas.sh
New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile »

An open-source refinement checker for the CSP process algebra.