2012-03-06 6 views
1

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

N = 1. 

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

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

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

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

ответ

4

Боюсь, что у Prolog нет назначений переменных, как вы привыкли, просто привязка переменных. Так что "заявление"

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

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

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

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

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

+1

Дьявол в деталях. "" vs "," все изменилось. – CyberShot

+0

@ daniel-lyons: использование 'is' медленнее, чем' = ', поскольку оценивается правая часть, даже если это простое число. Очевидно, что это может зависеть от конкретной системы Пролога, а эффект минимален, но для сырой скорости используйте унификацию. – twinterer

+0

@twinterer Мое замечание о 'is' связано с тем фактом, что новички, которые набирают' N = 1 + Y', обычно нуждаются в дополнении. :) –

2

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

| ?- N = 1. 

N = 1 

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

Z = [N,2,3,4] 

yes 
Смежные вопросы