- Append
In
computer programming ,append
is the name of aprocedure for concatenating (linked) lists orarray s in somehigh-level programming language s.Lisp
Append
originates in theLisp programming language . Theappend
procedure takes two or more (linked) lists as arguments, and returns the concatenation of these lists.(append '(1 2 3) '(a b) '() '(6)) ;Output: (1 2 3 a b 6)
Since the
append
procedure must completely copy all of its arguments except the last, both its time and space complexity are O("n") for a list of elements. It may thus be a source of inefficiency if used injudiciously in code.The
nconc
procedure (calledappend!
in Scheme) performs the same function asappend
, but destructively: it alters the cdr of each argument (save the last), pointing it to the next list.Implementation
Append
can easily be defined recursively in terms of
. The following is a simple implementation in Scheme, for two arguments only:cons (define append (lambda (ls1 ls2) (if (null? ls1) ls2 (cons (car ls1) (append (cdr ls1) ls2)))))
Other languages
Following Lisp, other
high-level language s which featurelinked list s as primitivedata structure s have adopted anappend
Haskell uses the++
operator to append lists.OCaml uses the@
operator to append lists.Other languages use the
+
or++
symbols for nondestructive string/list/array concatenation.Prolog
The
logic programming language Prolog features a built-inappend
predicate, which can be implemented as follows:append( [] ,Ys,Ys). append( [X|Xs] ,Ys, [X|Zs] ) :- append(Xs,Ys,Zs).
This predicate can be used for appending, but also for picking lists apart. Calling
?- append(L,R, [1,2,3] ).
yields the solutions:
L = [] , R = [1, 2, 3] ; L = [1] , R = [2, 3] ; L = [1, 2] , R = [3] ; L = [1, 2, 3] , R = []
Miranda
This right-fold, from Hughes (1989:5-6), has the same semantics (by example) as the Scheme implementation above, for two arguments.
append a b = reduce cons b a
Where reduce is Miranda's name for fold, and cons constructs a list from two values or lists.
For example,
append [1,2] [3,4] = reduce cons [3,4] [1,2] = (reduce cons [3,4] ) (cons 1 (cons 2 nil)) = cons 1 (cons 2 [3,4] )) (replacing cons by cons and nil by [3,4] ) = [1,2,3,4]
Haskell
This right-fold has the same effect as the Scheme implementation above:
append :: [a] -> [a] -> [a] append xs ys = foldr (:) ys xsThis is essentially a reimplementation of Haskell's
++
operator.DOS command
append is a
DOS command that allows programs to open data files in specified directories as if they were in the current directory. It appends the directories to the search path list.References
* Hughes, John. 1989. Why functional programming matters. Computer Journal 32, 2, 98-107. http://www.math.chalmers.se/~rjmh/Papers/whyfp.pdf
* Steele, Guy L. Jr. "Common Lisp : The Language, Second Edition". 1990. pg. 418, description ofappend
.
Wikimedia Foundation. 2010.