2014-11-24 2 views
1

Есть ли способ я могу создать функцию для того/3, который делает это:
оных (1,2, X) - Х 3.
добавить (1, X, 3) - X равно 2.
add (X, 2,3) - X равно 1.Добавление в Прологе

+1

Пожалуйста, ознакомьтесь с [Справка по переполнению стека] (http://stackoverflow.com/help), чтобы узнать, как задать правильный вопрос. Вам нужно показать попытку и задать конкретные вопросы о том, где вы застряли. Как подсказка к вашей проблеме, см. Библиотеку Prolog CLPFD. – lurker

+1

Если вы используете SWI-Prolog, есть предикат 'plus/3', который делает именно это. –

+0

без каких-либо расширений пролога (в прологе ISO) вы можете использовать предикат var/1 для проверки переменной свободной или связанной и выполнить соответствующее добавление в зависимости от того, какой аргумент (1-й, 2-й или 3-й) является бесплатным – user396672

ответ

2

В качестве новичка лучше всего использовать library(clpfd), который обеспечивает все эти функциональные возможности; и даже больше. С

?- use_module(library(clpfd)). 

Мы начинаем, в SICStus вы должны теперь сказать assert(clpfd:full_answer), то мы имеем:

?- 1+2#=Z. 
Z = 3. 

?- 1+Y#=3. 
Y = 2. 

, как вы ожидали. Но даже больше!

?- X+X#=Z. 
2*X#=Z. 

?- X+X#=X. 
X = 0. 

?- X+Y#=Z. 
X+Y#=Z. 
Смежные вопросы