将以下谓词定义为prolog程序,以便
Min
是两个数字X
和Y
中较小的一个。
min (X, Y, Min)
你能帮我理解这个问题吗?
答案 0 :(得分:7)
在Prolog中,我们讨论谓词。在其他语言中,您可能会将其称为函数,但在数学中,我们确信函数将单个值与将某个公式应用于函数的其他一些参数的结果相关联。这种方向性在Prolog中不成立,因此我们将其称为谓词或关系。
这个问题的规范解决方案就是:
min(X, Y, Min) :- X =< Y, Min = X; Min = Y.
在Prolog中,你总是有一个Horn子句,它有一个头部和一个身体。头部位于:-
之前,并命名谓词。正文是:-
右侧的表达式列表。您应该将其视为&#34;在min(X, Y, Min)
和X =< Y
或Min = X
&#34;时推断Min = Y
。如果条款的主体得到满足,则推断该条款的主管。换句话说,如果X =< Y
和Min = X
,则可以说min(X, Y, X)
成立。
这基本上说,如果X =&lt; Y,那么Min是X;否则,Min是Y.用多个子句:
可能更容易表达min(X, Y, X) :- X =< Y.
min(X, Y, Y) :- X > Y.
但这会创建一个不必要的选择点; Prolog可能认为它有多种解决方案,即使你和我都知道X只能大于或小于Y 或小于Y.(我们可能会通过使用来告知Prolog我们的意识 cut 运算符,!,但是当你可以使用连接和析取时,这种情况就太过分了。)
答案 1 :(得分:2)
这将返回X&amp; Y
的最小参数min(X,Y,M):-
X<Y,!,M=X.
min(X,Y,M):-
M=Y.