In many
programming languages, string concatenation is a
binary infix operator, and in some it is written without an operator. This is implemented in different ways: •
Overloading the plus sign + Example from C#: "Hello, " + "World" has the value "Hello, World". • Dedicated operator, such as . in PHP, & in Visual Basic, and || in SQL. This has the advantage over reusing + that it allows implicit
type conversion to string. •
string literal concatenation, which means that adjacent strings are concatenated without any operator. Example from C: "Hello, " "World" has the value "Hello, World". •
Interpolation, using a string interpolater to concatenate. Example from C#: $"{hello}{world}", where string hello = "Hello, "; and string world = "World"; • Formatting, using a string formatter to concatenate. Example from Java: String.format("%s%s", "Hello, ", "World") In many scientific publications or standards the concatenation operator notation used is ||.
Lisp Append originates in the
programming language Lisp. The append procedure takes zero 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 n elements. It may thus be a source of inefficiency if used injudiciously in code. The nconc procedure (called append! in
Scheme) performs the same function as append, 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
cons. The following is a simple implementation in Scheme, for two arguments only: (define append (lambda (ls1 ls2) (if (null? ls1) ls2 (cons (car ls1) (append (cdr ls1) ls2))))) Append can also be implemented using fold-right: (define append (lambda (a b) (fold-right cons b a)))
Prolog The
logic programming language
Prolog features a built-in append 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 In
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 In
Haskell, this right-
fold has the same effect as the Scheme implementation above: append :: [a] -> [a] -> [a] append xs ys = foldr (:) ys xs This is essentially a reimplementation of Haskell's ++ operator.
Perl In
Perl, the push function is equivalent to the append method, and can be used in the following way. my @list; push @list, 1; push @list, 2, 3; The end result is a list containing [1, 2, 3] The unshift function appends to the front of a list, rather than the end my @list; unshift @list, 1; unshift @list, 2, 3; The end result is a list containing [2, 3, 1] When opening a file, use the ">>" mode to append rather than over write. open(my $fh, '>>', "/some/file.txt"); print $fh "Some new text\n"; close $fh; Note that when opening and closing file handles, one should always check the return value.
Python In
Python, use the list method or the infix operators and to append lists. >>> l = [1, 2] >>> l.extend([3, 4, 5]) >>> l [1, 2, 3, 4, 5] >>> l + [6, 7] [1, 2, 3, 4, 5, 6, 7] Do not confuse with the list method , which adds a
single element to a list: >>> l = [1, 2] >>> l.append(3) >>> l [1, 2, 3]
Bash In
Bash the append redirect is the usage of ">>" for adding a stream to something, like in the following series of shell commands: echo Hello world! >text; echo Goodbye world! >>text; cat text The stream "Goodbye world!" is added to the text file written in the first command. The ";" implies the execution of the given commands in order, not simultaneously. So, the final content of the text file is:
Other languages Other
high-level programming languages which feature
linked lists as primitive
data structures have adopted an append. To append lists, as an
operator,
Haskell uses ++,
OCaml uses @. Other languages use the + or ++ symbols to nondestructively concatenate a
string, list, or array. ==Implementation==