Наличие списка в качестве элемента в списке Пролог - PullRequest
0 голосов
/ 21 марта 2019

Учитывая список (List1), я пытаюсь возвести в квадрат каждое число в списке и вернуть ответы в новом списке (List2), где каждый элемент в List2 находится в форме (Xi, Ji).

?- square([1,2,3,], L).
L = [[1,1],[2,4],[3,9]].

Это мой код:

square([], []).
square([N|Tail], [SqrdN|SqrdTail]) :-
    SqrdN is [N|N*N],
    square(Tail, SqrdTail).

Это дает мне ошибку типа: ожидается [[] ', найдено `[1 | 1 * 1]' (составное) (" x "должен содержать один символ).

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

1 Ответ

3 голосов
/ 21 марта 2019

Вы смешиваете свое выходное представление (списки [Item, SquaredItem]) с вычислением квадратов, и ваш выходной термин также не является правильным списком из двух элементов.

Использование библиотеки clpfd:

:- use_module(library(clpfd)).
square([], []).
square([N|Tail], [[N, SqrdN]|SqrdTail]) :-
    SqrdN #= N*N,
    square(Tail, SqrdTail).

или без clpfd:

square([], []).
square([N|Tail], [[N, SqrdN]|SqrdTail]) :-
    SqrdN is N*N,
    square(Tail, SqrdTail).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...