例如,我有一些代表数字 1 到 4 的原子。
喜欢
number(one).
number(two).
number(three).
number(four).
Run Code Online (Sandbox Code Playgroud)
现在我必须编写一个谓词来检查第一个数字是否大于第二个数字。
istBiggerThen(X,Y) :-
( X < Y
-> true
; false
).
Run Code Online (Sandbox Code Playgroud)
但现在我只能问诸如此类
isBiggerThan(3,4).
Run Code Online (Sandbox Code Playgroud)
但是我要
isBiggerThan(three,four).
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?请帮助我:) 提前致谢。
一种方法是添加将英语原子“映射”到数值的事实,然后使用这些事实进行比较、加法等:
numericValue(one, 1).
numericValue(two, 2).
numericValue(three, 3).
numericValue(four, 4).
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
istBiggerThen(XinEng,YinEng) :-
numericValue(XinEng, X),
numericValue(YinEng, Y),
/* The rest of your code goes here */
( X < Y -> true ; false).
Run Code Online (Sandbox Code Playgroud)
请注意,numericValue/2可以两种方式使用 - 将名称转换为数字,以及将数字转换为名称。例如,您可以编写一个谓词来计算/检查使用相应数字的英文名称拼写的两个原子的总和。