Lambda-Prolog treasure
This is our yield from the Lambda-Prolog
treasure hunt.
List reverse
In Lambda-Prolog:
type reverse (list A) -> (list A) -> o.
reverse [] [].
reverse [H|T] Y :- reverse T Z, append Z [H] Y.
In Haskell:
reverse [] = []
reverse (h:t) = (reverse t) ++ [h]
Dynamic scoping
magic_number_plus_one X gives X : 4
foo X gives X : 3
- Lambda-Prolog's modularity is as bad as Lisp 1.5.
A caller can change the bindings of any free variables in the callee.
Red vs. green cuts
min 2 5 5 incorrectly answers true. A
simple way to fix it is
min X Y Z :- X <= Y, !, X = Z.
min X Y Y.
In Haskell, this corresponds to
min x y z | (x < y) = (x == z).
min x y z | (y == z) = True.
Loops
read_all :- repeat, read X, eof X, !.
PLE Home page
Last modified: Tue Jan 30 22:29:38 EST 1996