Prolog - 比较两个数字

fuu*_*man 1 prolog

例如,我有一些代表数字 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)

我怎样才能做到这一点?请帮助我:) 提前致谢。

das*_*ght 6

一种方法是添加将英语原子“映射”到数值的事实,然后使用这些事实进行比较、加法等:

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可以两种方式使用 - 将名称转换为数字,以及将数字转换为名称。例如,您可以编写一个谓词来计算/检查使用相应数字的英文名称拼写的两个原子的总和。