【问题标题】:prolog-Roman numeralprolog-罗马数字
【发布时间】:2012-11-07 12:41:13
【问题描述】:

我正在尝试定义一个序言谓词 numeric(X,Y),如果 X 是十进制数 Y 的罗马数字,则该谓词为真。

numerals(X,Y) :- X is ('M'), Y>=1000.
numerals(X,Y) :- X is  ('CM'), Y>=900.
numerals(X,Y) :- X is  ('D'), Y>=500.
numerals(X,Y) :- X is  ('CD'), Y>=400.
numerals(X,Y) :- X is  ('C'), Y>=100.
.
.
.
.

当我运行我的代码时,我得到一个错误:

?-numerals(M,1001).
ERROR: toplevel: Undefined procedure: numerals/2 (DWIM could not correct goal)

【问题讨论】:

    标签: prolog roman-numerals


    【解决方案1】:

    您尚未加载程序。试试listing 看看这个 - 否则请参考my first reply

    【讨论】:

    • 数字(X,Y):- X 是('M'),Y>=1000。数字(X,Y):- X 是('CM'),Y>=900。数字(X,Y):- X 是('D'),Y>=500。数字(X,Y):- X 是('CD'),Y>=400。数字(X,Y):- X 是('C'),Y>=100。数字(X,Y):- X 是('L'),Y>=50。数字(X,Y):- X 是('XL'),Y>=40。数字(X,Y):- X 是('X'),Y>9。数字(X,Y):- X 是('IX'),Y>=9。数字(X,Y):- X 是('V'),Y>4。数字(X,Y):- X 是('IV'),Y>=4。数字(X,Y):- X 是('I'),Y>=1。数字(X,Y) :- X 是 ('-'), Y>0.
    【解决方案2】:

    Prolog 基于生成然后测试。两部分之间的顺序很重要。你想测试什么,你想生成什么?

    此外,您确定要使用“is”吗?这是用于算术运算的。

    最后,你真的打算编写没有相互依赖关系的规则吗?使用递归算法可能是个好主意……否则您将不得不为任何可能的数字编写规则。

    【讨论】:

    • 我想测试所有谓词以输出真/假。即如果我输入数字(V,1000),它将返回 false。
    • 因为它与任何谓词都不匹配。我使用“是”还是等号都没关系。我已经为所有可能的数字写了一条规则。
    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    相关资源
    最近更新 更多