序言:如果输入一个浮点数,输出将输出错误

问题描述:

我是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) 

请让我知道我要去哪里错了,我可以做些什么来解决这个问题。这是说我也有一个单身变量。谢谢。

在发布代码。著名的问题:

  • 在Prolog,谓词不能以大写字母开头。所以 MultOf5(N) ...无效。从你所显示的消息来看,我认为这不是你的代码真正写入的方式。
  • multOf5(Other) ...只是指N一次,而不是 使用。这就是产生单身警告的原因。
  • mod,正如你所知,它是以整数运算的,而你的第一个子句试图在4.2上尝试mod,这将会失败。如果N是整数,则可以使用integer(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") 
    ). 
+0

是的对不起,我改变了一些我写的代码,所以我可以得到的重点。谢谢!这使得更有意义。 – tadashi

+0

打印出错误后,我有办法切断代码吗?我加了!之前;(或),但它告诉我它的错误。 – tadashi

+0

@tadashi你会想用'print'剪下。你可以把它写成'print(...),!'。由于'print'没有任何选择点,所以你可以在之前放入:'!,print(...)'。 – lurker