Добавить инициализированный список - PullRequest
0 голосов
/ 03 мая 2018

Если у меня есть предварительно инициализированный список, например:

List = [_1663, _1665, _1667]

Как я могу поместить переменную (например, простое число) в этот список, заняв первое свободное место?

Я пытался:

append(5, List).

Но это не работает. Список должен быть предварительно инициализирован, как указано выше. Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

Пролог не будет автоматически создавать следующую свободную переменную в списке. Вы можете легко сделать это с помощью предиката:

bind_first_free_element(Element, List) :-
    once(bind_free_element(Element, List)).

bind_free_element(X, [Y|_]) :-
    var(Y), X = Y.
bind_free_element(X, [_|T]) :-
    bind_free_element(X, T).

При запросе вы получаете:

2 ?- L = [a,X,Y,b,Z], bind_free_element(5, L).
L = [a, 5, Y, b, Z],
X = 5 ;
L = [a, X, 5, b, Z],
Y = 5 ;
L = [a, X, Y, b, 5],
Z = 5 ;
false.

Итак, вы можете видеть, что bind_free_element показывает всех возможных решений для связывания свободного элемента. Таким образом, мы используем bind_first_free_element/2, который использует once/1 только для поиска первого решения:

3 ?- L = [a,X,Y,b,Z], bind_first_free_element(5, L).
L = [a, 5, Y, b, Z],
X = 5.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...