Как добавить 1 элемент во вложенный список в Прологе?
Я хочу добавить один элемент списка во вложенный список:
predicates
append(li,li,li).
clauses
append([X|Y],Z,[X|W]):- append(Y,Z,W).
append([],X,X).
Например:
append([ [1],[2],[3] ],[4],A)
Solution: A = [ [1],[2],[3],[4] ]
Турбо Пролог сказал: Тип ошибки.
Как я могу это сделать?
2 ответа
Проблема в том, что вы неправильно определяете домены и добавляете два разных домена (список целых чисел со списком целых).
Если вы хотите добавить списки целых чисел (как видно из вашего примера), код должен быть
domains
li = integer*
lili = li*
predicates
append(lili, lili, lili).
clauses
append([X|Y],Z,[X|W]):- append(Y,Z,W).
append([],X,X).
и затем в примере второй список должен быть списком из двух списков, приводя к:
append([ [1],[2],[3] ],[[4]],A).
Solution: A = [ [1],[2],[3],[4] ]
Обратите внимание, что второй список [[4]] вместо [4].
Попробуй это.
clauses
append([X|Y],Z,[X|W]):- append(Y,Z,W).
append([],X,[X]).
Результат, который вы ожидаете, это список списка. Поэтому, если код вступает во второй предикат, он должен сформировать правильный тип - в вашем коде это была простая транзакция аргумента. Правильнее всего обернуть его в другой список, чтобы позже заполнить его элементами из первого "аргумента".