Jump to content

Добавить

В компьютерном программировании , append — это операция объединения связанных списков или массивов в некоторых языках программирования высокого уровня .

Append берет свое начало от языка программирования Lisp . append Процедура принимает ноль или более (связанных) списков в качестве аргументов и возвращает объединение этих списков.

(append '(1 2 3) '(a b) '() '(6))
;Output: (1 2 3 a b 6)

Поскольку append Процедура должна полностью скопировать все свои аргументы, кроме последнего, ее временная и пространственная сложность равна O( n ) для списка элементы. Таким образом, это может стать источником неэффективности, если неразумно использоваться в коде.

The nconc процедура (называемая append! в схеме ) выполняет ту же функцию, что и append, но деструктивно : он изменяет cdr каждого аргумента (сохраняя последний), указывая его на следующий список.

Выполнение

[ редактировать ]

Append можно легко определить рекурсивно в терминах cons. Ниже приведена простая реализация в Scheme, только для двух аргументов:

(define append
  (lambda (ls1 ls2)
    (if (null? ls1)
      ls2
      (cons (car ls1) (append (cdr ls1) ls2)))))

Добавление также можно реализовать с помощью Fold-Right:

(define append
   (lambda (a b)
      (fold-right cons b a)))

Другие языки

[ редактировать ]

Вслед за Лиспом другие языки программирования высокого уровня , в которых связные списки представляют собой примитивные структуры данных , приняли append. Для добавления списков в оператора Haskell качестве использует ++, OCaml использует @.

В других языках используется + или ++ символы для неразрушающего объединения строки , списка или массива.

Язык логического программирования имеет Пролог встроенный append предикат, который можно реализовать следующим образом:

append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :-
    append(Xs,Ys,Zs).

Этот предикат можно использовать для добавления, а также для разделения списков. Вызов

 ?- append(L,R,[1,2,3]).

дает решения:

L = [], R = [1, 2, 3] ;
L = [1], R = [2, 3] ;
L = [1, 2], R = [3] ;
L = [1, 2, 3], R = []

В Миранде этот правый сгиб из Хьюза (1989:5-6) имеет ту же семантику (по примеру), что и реализация Scheme выше, для двух аргументов.

append a b = reduce cons b a

Где сокращение — это имя Миранды для сгиба , а cons создает список из двух значений или списков.

Например,

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 этот правый сгиб имеет тот же эффект, что и реализация Scheme выше:

append :: [a] -> [a] -> [a]
append xs ys = foldr (:) ys xs

По сути, это повторная реализация языка Haskell. ++ оператор.

В Perl функция push эквивалентна методу добавления и может использоваться следующим образом.

my @list;
push @list, 1;
push @list, 2, 3;

Конечным результатом является список, содержащий [1, 2, 3]

Функция unshift добавляется в начало списка, а не в конец.

my @list;
unshift @list, 1;
unshift @list, 2, 3;

Конечным результатом является список, содержащий [2, 3, 1]

При открытии файла используйте режим «>>» для добавления, а не для перезаписи.

open(my $fh, '>>', "/some/file.txt");
print $fh "Some new text\n";
close $fh;

Обратите внимание, что при открытии и закрытии дескрипторов файлов всегда следует проверять возвращаемое значение.

В Python используйте метод списка extend или инфиксные операторы + и += для добавления списков.

>>> l = [1, 2]
>>> l.extend([3, 4, 5])
>>> l
[1, 2, 3, 4, 5]
>>> l + [6, 7]
[1, 2, 3, 4, 5, 6, 7]

Не путайте с методом списка. append, который добавляет один в список элемент:

>>> l = [1, 2]
>>> l.append(3)
>>> l
[1, 2, 3]

В Bash перенаправление добавления — это использование «>>» для добавления потока к чему-либо, как в следующей серии команд оболочки:

echo Hello world! >text; echo Goodbye world! >>text; cat text

Трансляция «Прощай, мир!» добавляется в текстовый файл, записанный в первой команде. ";" подразумевает выполнение данных команд по порядку, а не одновременно. Итак, окончательное содержимое текстового файла:

Hello world!
Goodbye world!
  • Хьюз, Джон (1989). «Почему функциональное программирование важно» (PDF) . Компьютерный журнал . 32 (2): 98–107. дои : 10.1093/comjnl/32.2.98 . Архивировано из оригинала (PDF) 13 апреля 2007 г.
  • Стил, Гай Л. младший (1990). « Common Lisp : The Language» (2-е изд.): 418. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь ) Описание append.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 278bf348e59e94a833bb97eed11571e6__1719442440
URL1:https://arc.ask3.ru/arc/aa/27/e6/278bf348e59e94a833bb97eed11571e6.html
Заголовок, (Title) документа по адресу, URL1:
Append - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)