On 3/11/2010, at 9:50 PM, Claus Reinke wrote:
The bottom line is that
- in logic programming languages, building a list by working on
a pair of arguments representing a segment of the list is the
NORMAL way to build a list; it's as fast as it gets, and the
list is inspectable during construction.
- at least in SML, the (fn ys => xs @ ys) [Haskell: \ys -> xs ++ ys]
approach is stunningly slow, so slow as to make even naive use of
append more attractive for most uses of; it is not the normal way
to build lists, and for good reason; you can do nothing with a list
so represented except compose and apply.
The practical consequence of this is that calling both techniques by
the same name is going to mislead people familiar with one kind of
language when they use the other: logic programmers will wrongly
expect dlists to be practically useful in functional languags,
functional programmers will expect them to be impractical in logic
programming languages.