Как добавить элемент к каждому элементу списка?(Пролог) - PullRequest
0 голосов
/ 30 декабря 2018

Я хотел бы добавить элемент к каждому элементу списка.элемент тоже должен быть списком.

Пример:

A = [a,b,c]
B = [ele,ele2]

Результат будет:

R = [[a,ele,ele2],[b,ele,ele2],[c,ele,ele2]]

Я пытался

 maplist(custom_append,A,B,R).

Но он возвращает false с

custom_append(X,Y,[X|Y]).

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Простой способ будет выглядеть так:

append_list([], _, []).

append_list([A|As], B, [[A|B]|Cs]) :-
    append_list(As, B, Cs).

Даже не нужно использовать maplist.

0 голосов
/ 30 декабря 2018

Обратите внимание, что B - это не список, по которому вы хотите повторить , вы хотите добавить элемент A в тот же список B.

.Самый простой способ достичь этого, вероятно, поменять порядок элементов в custom_append/3 на:

custom_append(<b>Y</b>, <b>X</b>, [X|Y]).

, и тогда мы сможем получить это, используя maplist/3:

maplist(<b>custom_append(B)</b>, A, R).

мы, таким образом, уже делаем что-то, что ведет себя очень похоже на частичное применение : мы передаем функтор custom_append(B), и Пролог затем сделает вызов с custom_append(B, A<sub>i</sub>, R<sub>i</sub>) (A<sub>i</sub> и R<sub>i</sub>здесь используется для обозначения элементов списков A и R).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...