Suppose I have a higher order language defined with the (rough) BNF (using Lisp notation):
c ::= constants
v ::= variables
e ::= c | v | (if e e e) | (e e_1 e_2 ... e_n) | (fn [v_1 v_2 ... v_n] e)
In the above, the option (e e_1 e_2 ... e_n)
represents applying an expression e
to arguments e_1
through e_n
.
Is every program written in the above language also implicitly in "continuation passing style"? If not, what is the difference?