[SWIPL] Variables for predicate names

Ulrich Neumerkel ulrich@complang.tuwien.ac.at
Fri, 01 Oct 2010 10:57:26 +0200


Richard O'Keefe:
>Recall how the call/N predicates first proposed in the Mycroft/O'Keefe
>type checking paper in AI Journal...

Please remark that in aforementioned paper you write on p.305:

| ... a family of predicates with types given by
|
|           pred apply(pred(alpha), alpha), apply(pred(alpha,beta), alpha,beta), ...
|
| The only way to introduce objects of type pred is by a special piece of syntax
| given by
|           Term ::= lambda Var* . Atom .     % actually a middle-dot

later:

| map(F, cons(A,L), cons(B,M)) :- apply(F,A,B), map(L,M)
| map(F, nil, nil) :-                         % ^^^^^^ sic
|
| neglist(X, Y) :- map(lambda(A,B).negate(A,B), X,Y)
|

There is no mentioning that neglist could be more compactly:

neglist(X, Y) :- map(negate, X,Y)

Which is quintessential to call/N.  So call/N isn't there yet, but a
precursor restricted to some lambdas.

My estimate is that call/N must have first appeared in 1985..1987.