Cписок: Предикат: del2(L1, L2). Удаляет из исходного списка L1 каждый второй элемент, результирующий список L2. - Prolog
Формулировка задачи:
Помогите решить:
Предикат: del2(L1, L2). Удаляет из исходного списка L1 каждый второй элемент, результирующий список L2.
Пример: Goal: del2([a,b,c,d,e], L2). L2=["a", "c", "e"] 1 Solution
никто не знает?
Решение задачи: «Cписок: Предикат: del2(L1, L2). Удаляет из исходного списка L1 каждый второй элемент, результирующий список L2.»
textual
Листинг программы
domains trace sym_list = symbol* int_list = integer* predicates del2(sym_list, sym_list). del2(int_list, int_list). clauses del2([], []). del2([X], [X]). del2([X,_|Xs], [X|Ys]) :- del2(Xs, Ys). goal trace(on), del2([a,b,c,d,e], L2), write(L2).
Объяснение кода листинга программы
В этом коде используется язык программирования Prolog. Целью программы является удаление каждого второго элемента из исходного списка, создание нового списка без четных элементов. В начале кода определены два домена:
- sym_list - список символов.
- int_list - список целых чисел. Затем определены два предиката:
- del2 - удаляет каждый второй элемент из списка.
- goal - указывает на цель выполнения программы. После этого определены два утверждения:
- del2([], []) - если исходный список пустой, то результатом будет пустой список.
- del2([X], [X]) - если в исходном списке только один элемент, то этот элемент сохраняется в результирующем списке. Затем определено третье утверждение:
- del2([X,_|Xs], [X|Ys]) :- del2(Xs, Ys). - если в исходном списке более одного элемента, то в результирующем списке сначала указывается первый элемент, а затем вызывается процедура del2 для оставшихся элементов. В конце кода указывается цель выполнения программы:
- trace(on), - включить трассировку.
- del2([a,b,c,d,e], L2), - удаление каждого второго элемента из списка [a,b,c,d,e].
- write(L2) - вывод результирующего списка L2.