Maintainer: | robdockins AT fastmail DOT fm |

Current Version: | 0.9.1 |

Current Release Date: | November 27, 2007 |

Homepage: | http://www.cs.princeton.edu/~rdockins/lambda/home/ |

Darcs repo: | http://www.cs.princeton.edu/~rdockins/lambda/ |

Hackage | LambdaShell |

The Lambda Shell is a feature-rich shell environment and command-line tool for evaluating terms of the pure, untyped lambda calculus. The Lambda Shell builds on the shell creation framework Shellac, and showcases most of Shellac's features.

- Evalutate lambda terms directly from the shell prompt using normal or applicative order. In normal order, one can evaluate to normal form, head normal form, or weak head normal form.
- Define aliases for lambda terms using a top level, non-recursive 'let' construct.
- Show traces of term evaluation, or dump the trace to a file
- Count the number of reductions when evaluating terms
- Test two lambda terms for beta-equivalance (that is; if two terms, when evaluated to normal form, are alpha equivalant).
- Programs can be entered from the command line (using the -e option) or piped into stdin (using the -s option).
- Perform continuation passing style (CPS) transforms on terms before
evaluation using the double bracked syntax, e.g.,
`[[ five ]]`

.

The Lambda Shell is licensed under the GNU GPL version 2. See the LICENSE file for details.

The Lambda Shell, version 0.3 Copyright 2005-2006, Robert Dockins The Lambda Shell comes with ABSOLUTELY NO WARRANTY; for details type ':nowarranty'. This is free software, and you are welcome to redistribute it under certain conditions; type ':gpl' for details > (\x y. x) (\a. a) (\b. b) \a. a > :load prelude.lam > :show four four = succ three > four \f x. f (f (f (f x))) > mul two three \f x. f (f (f (f (f (f x))))) > let x = plus six two > x == eight equal > x == nine not equal > one \f x. f x > [[ one ]] \f k. k (\x k_0. f x k_0) > :showcount showcount on > sub seven two \f x. f (f (f (f (f x)))) <<90 reductions>> > let l = insertSort (cons two (cons three (cons one nil))) > index zero l one <<463 reductions>> > index one l two <<2135 reductions>> > index two l three <<5720 reductions>> > :quit