There has been a great deal of research on programming languages for computing with binding and scope (bound variables, *** -equivalence, capture-avoiding substitution). These languages are useful for a variety of tasks, such as implementing domain-specific languages and formalizing the metatheory of programming languages. Functional programming with binding and scope involves two different notions of function: functions-as-data and functions-as-computation . Functions-as-data, used to represent abstract syntax with variable binding, have an intensional, syntactic, character, in the sense that they can be inspected in ways other than function application. For example, many algorithms that process abstract syntax recur under binders, treating variables symbolically. On the other hand, functions-as-computation, the usual functions of functional programming, have an extensional character--a function from A to B is a black box that, when given an A , delivers a B .
[1]
Robert Harper,et al.
Positively dependent types
,
2009,
PLPV '09.
[2]
Noam Zeilberger.
Refinement types and computational duality
,
2009,
PLPV '09.
[3]
Noam Zeilberger,et al.
The logical basis of evaluation order and pattern-matching
,
2009
.
[4]
Noam Zeilberger,et al.
Focusing and higher-order abstract syntax
,
2008,
POPL '08.
[5]
Noam Zeilberger,et al.
Focusing on Binding and Computation
,
2008,
2008 23rd Annual IEEE Symposium on Logic in Computer Science.
[6]
Robert Harper,et al.
A universe of binding and computation
,
2009,
ICFP.
[7]
Noam Zeilberger.
On the unity of duality
,
2008,
Ann. Pure Appl. Log..