Připojit - Append
v programování, připojit
je operace zřetězení propojené seznamy nebo pole v některých programovací jazyky na vysoké úrovni.
Lisp
Připojit
pochází z Programovací jazyk Lisp. The připojit
postup trvá nula nebo více (propojené) seznamy jako argumenty a vrátí zřetězení těchto seznamů.
(připojit '(1 2 3) '(A b) '() '(6)); Výstup: (1 2 3 a b 6)
Protože připojit
postup musí úplně kopírovat všechny jeho argumenty kromě posledního, oba jeho časová a prostorová složitost jsou Ó(n) pro seznam elementy. Může se tedy jednat o zdroj neefektivity, je-li v kódu použit nevhodně.
The nconc
postup (tzv připojit!
v Systém ) plní stejnou funkci jako připojit
, ale destruktivně: mění to cdr každého argumentu (uložte poslední) a přejděte na další seznam.
Implementace
Připojit
lze snadno definovat rekurzivně ve smyslu nevýhody
. Následuje jednoduchá implementace ve schématu, pouze pro dva argumenty:
(definovat připojit (lambda (ls1 ls2) (-li (nula? ls1) ls2 (nevýhody (auto ls1) (připojit (cdr ls1) ls2)))))
Append lze také implementovat pomocí fold-right:
(definovat připojit (lambda (A b) (fold-right nevýhody b A)))
Jiné jazyky
Následující Lisp, další jazyky na vysoké úrovni která funkce propojené seznamy jako primitivní datové struktury přijali připojit
. Haskell používá ++
operátor pro připojení seznamů. OCaml používá @
operátor pro připojení seznamů.
Jiné jazyky používají +
nebo ++
symboly pro nedestruktivní tětiva / list / pole zřetězení.
Prolog
The logický programovací jazyk Prolog má vestavěný připojit
predikát, který lze implementovat následovně:
připojit([],Ys,Ys).připojit([X|Xs],Ys,[X|Zs]) :- připojit(Xs,Ys,Zs).
Tento predikát lze použít k připojování, ale také k oddělování seznamů. Povolání
?- připojit(L,R,[1,2,3]).
přináší řešení:
L = [], R = [1, 2, 3]; L = [1], R = [2, 3]; L = [1, 2], R = [3]; L = [1, 2, 3], R = []
Mirando
Toto právo -složit, od Hughese (1989: 5-6), má stejnou sémantiku (příkladem) jako výše uvedená implementace schématu, a to pro dva argumenty.
připojit a b = snížit zápory b a
Kde redu je Mirandino jméno složit, a nevýhody vytvoří seznam ze dvou hodnot nebo seznamů.
Například,
append [1,2] [3,4] = snížit zápory [3,4] [1,2] = (snížit zápory [3,4]) (zápory 1 (zápory 2 žádné)) = zápory 1 (zápory 2 [ 3,4])) (nahrazením nevýhod nevýhodami a nulovou hodnotou [3,4]) = [1,2,3,4]
Haskell
Toto právo -složit má stejný účinek jako výše uvedená implementace schématu:
připojit :: [A] -> [A] -> [A]připojit xs ys = foldr (:) ys xs
Jedná se v podstatě o reimplementaci Haskellova ++
operátor.
Perl
v Perl, funkce push je ekvivalentní metodě append a lze ji použít následujícím způsobem.
můj @seznam;tlačit @seznam, 1;tlačit @seznam, 2, 3;
Konečným výsledkem je seznam obsahující [1, 2, 3]
Funkce posunu se připojí na začátek seznamu, nikoli na konec
můj @seznam;neposunutí @seznam, 1;neposunutí @seznam, 2, 3;
Konečným výsledkem je seznam obsahující [2, 3, 1]
Při otevírání souboru použijte režim „>>“ pro připojení, nikoli pro přepis.
otevřeno(můj $ fh, '>>', „/some/file.txt“);tisk $ fh „Nějaký nový text“;zavřít $ fh;
Všimněte si, že při otevírání a zavírání úchytů souborů je třeba vždy zkontrolovat návratovou hodnotu.
Krajta
v Krajta, k přidání seznamů použijte metodu seznamu „extend“ nebo operátory infix + a + =.
l = [1, 2]l.rozšířit([3, 4, 5])tisk l + [6, 7]
Po provedení tohoto kódu je l seznam obsahující [1, 2, 3, 4, 5], zatímco generovaným výstupem je seznam [1, 2, 3, 4, 5, 6, 7].
Nezaměňujte s metodou seznamu „append“, která přidává a singl prvek do seznamu:
l = [1, 2]l.připojit(3)
Výsledkem je seznam obsahující [1, 2, 3].
Bash
v Bash přesměrování přílohy je použití „>>“ pro přidání streamu do něčeho, jako v následující sérii příkazů prostředí:
echo Ahoj světe! > text; echo Sbohem světe! >> text; kočičí text
Stream „Sbohem svět!“ je přidán do textového souboru napsaného v prvním příkazu. „;“ implikuje provedení daných příkazů, aby ne současně. Konečný obsah textového souboru je tedy:
Ahoj světe!
Sbohem světe!
Reference
- Hughes, Johne. 1989. Proč je funkční programování důležité. Computer Journal 32, 2, 98-107. https://web.archive.org/web/20070413005952/http://www.math.chalmers.se/~rjmh/Papers/whyfp.pdf
- Steele, Guy L. Jr. Společný Lisp: The Language, Second Edition. 1990. str. 418, popis
připojit
.