序言:如果输入一个浮点数,输出将输出错误
问题描述:
我是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")
).
是的对不起,我改变了一些我写的代码,所以我可以得到的重点。谢谢!这使得更有意义。 – tadashi
打印出错误后,我有办法切断代码吗?我加了!之前;(或),但它告诉我它的错误。 – tadashi
@tadashi你会想用'print'剪下。你可以把它写成'print(...),!'。由于'print'没有任何选择点,所以你可以在之前放入:'!,print(...)'。 – lurker