Пролог добавить переменную в список - PullRequest
1 голос
/ 06 марта 2012

Я хочу добавить в список переменную N, привязанную к числу.

N = 1.

append([N], [2,3,4], Z).

Z = [N,2,3,4]. //Wrong output!

Я хочу получить Z = [1,2,3,4]

Как добавить числовую частьпеременной, а не самой переменной?

Ответы [ 2 ]

6 голосов
/ 06 марта 2012

Боюсь, что у Пролога нет назначения переменных, как вы привыкли, только привязка переменных.Таким образом, «операторы»

N = 1.
append([N], [2,3,4], Z).

фактически представляют собой два совершенно не связанных запроса .К счастью, желаемый эффект может быть достигнут путем объединения ваших запросов:

N = 1, append([N], [2,3,4], Z).

Если вам действительно нужна глобальная переменная, вы всегда можете использовать факт или asserta/1 для ее динамического определения.

Также обратите внимание: в будущем вы, вероятно, захотите убедиться, что вы используете is вместо = при работе с числами.

2 голосов
/ 06 марта 2012

Какой пролог вы используете? Все прологи, о которых я знаю, сначала дадут ответ на N = 1. Это должно прояснить, что Пролог сначала ответил на запрос N = 1 с помощью N = 1, что на первый взгляд может показаться немного странным. Например, вот GNU:

| ?- N = 1.

N = 1

yes
| ?- 
append([N], [2,3,4], Z).

Z = [N,2,3,4]

yes
...