Prolog:如果输入浮点数,输出会输出错误

时间:2016-07-26 03:22:28

标签: prolog

我是SWI-prolog的新手,我的代码遇到了问题。我希望它确定输入是5的倍数而不是偶数,但如果它不是整数,它应该打印出错误消息。到目前为止,我有这个,但它没有打印出错误信息,而只是告诉我这是一个类型错误。

MultOf5(N) :- 
0 is N mod 5, \+ 0 is N mod 2. 
MultOf5(Other) :-
N is Other,
print("ERROR: The given parameter is not an integer").

当我输入时打印出来:

?-Multof5(4.7)
 Singleton variables: [N]
 mod/2: Type error: `integer' expected, found `4.2' (a float)

请让我知道我哪里出错了,我该怎么做才能解决这个问题。它说我也有一个单例变量。谢谢。

1 个答案:

答案 0 :(得分:3)

已发布代码中的注意事项:

  • 在Prolog中,谓词不能以大写字母开头。所以 MultOf5(N) ...无效。从你的信息来看 显示,我认为不是你的代码是如何写的。
  • multOf5(Other) ...仅指N一次,而不是其他情况 用过的。这就是产生单身警告的原因。
  • 如你所知,
  • mod对整数进行操作,而你的第一个子句会对值mod尝试4.2,这将失败。如果integer(N)是整数,则可以使用N成功。

我希望积极1 is N mod 2胜过负\+ 0 is N mod 2

oddMultOf5(N) :-
    (   integer(N)
    ->  0 is N mod 5,
        1 is N mod 2
    ;   print("ERROR: The given parameter is not an integer")
    ).