2015-07-06 2 views
2

Я хочу реализовать следующую функцию f(x,y) в ПрологеПростой пролог программа

f(x,y) = a*x+b*y 
where a = 1 if x > 0; a = -1 if x < 0; a = 0 if x = 0 
and b = -1 if y > 0; b = 1 if y < 0; b = 0 if y = 0 

Например,

f(2,-1) = 1*2 + 1*(-1) = 1 
f(-2,-1) = (-1)*(-2) + (-1)*1 = 1 
f(0,0) = 0*0 + 0*0 = 0 

Любой может помочь?

+1

Пролог не работают именно таким образом. Prolog не работает, Prolog логичен. поэтому вам нужно определить суждение, которое истинно. Затем вы можете задать вопрос Прологу, и он попытается дать ответ (да или нет) и переменную подстановку, если ответ будет да. –

+0

Но вы не можете приехать на SO и просто просить «Узнай меня на этом языке». SO здесь, чтобы помочь вам, когда вы застряли в мире кода, над которым вы работаете. –

+0

@ EmrysMyrooin: Я так не думаю, на самом деле мы все еще можем иметь такую ​​функцию в Prolog, примером может служить проблема добавления двух чисел. Пролог сообщает факты, основанные на фактах и ​​правилах в своей базе данных, а не просто ответы на вопросы «да-нет». –

ответ

0

(Предполагая, что у вас есть опечатка при определении y, y> 0 not y> = 0.) Вам необходимо определить связь между входными варами и результатом функции. Затем Prolog может ответить yes/true с заменой или нет/false.

f(X,Y,Answer):- 
    a_is(X,A), 
    b_is(Y,B), 
    Answer is A*X+B*Y. 

a_is(X,1):- 
    X>0. 
a_is(X,-1):- 
    X<0. 
a_is(0,0). 

b_is(Y,1):- 
    Y<0. 
b_is(Y,-1):- 
    Y>0. 
b_is(0,0). 

Пример:

?-f(2,-1,Answer). 
Answer =1; 
false. 
1

Как об использовании следующего состава?

f(X,Y,Result) :- 
    Result is abs(X) - abs(Y). 

Давайте рассмотрим некоторые вопросы:

?- f(0,0,0). 
true. 

?- f(-2,-1,1). 
true. 

?- f(2,-1,1). 
true. 
0

не должно быть гораздо более сложным, чем это однострочника:

f(X,Y,Z) :- Z is sign(X)*X + -sign(Y)*Y