prolog中3的奇数倍数

prolog中3的奇数倍数,prolog,Prolog,我需要有人能帮助如何做奇数倍的3在序言 定义一个谓词oddMultOf3/1,该谓词确定整数是否为 三的奇数倍。用户应该能够输入谓词 使用整数,例如,oddMultOf3(42)并计算为true或 错。如果给定的参数不是整数,则谓词应该 显示消息“错误:给定参数不是整数” 他们让我这么做 oddMultOf3(171). true. oddMultOf3(100). false. oddMultOf3(12). false. oddMultOf3(4.2). ERROR: The given p

我需要有人能帮助如何做奇数倍的3在序言

定义一个谓词
oddMultOf3/1
,该谓词确定整数是否为 三的奇数倍。用户应该能够输入谓词 使用整数,例如,
oddMultOf3(42)
并计算为true或 错。如果给定的参数不是整数,则谓词应该 显示消息“错误:给定参数不是整数”

他们让我这么做

oddMultOf3(171).
true.
oddMultOf3(100).
false.
oddMultOf3(12).
false.
oddMultOf3(4.2).
ERROR: The given parameter is not an integer
oddMultOf3(-9).
true.
但每次我尝试时都会收到错误

这是我的密码

oddMultOf3(N):-Y是N模3,Y=0

据我所知,三的奇数倍数意味着
N
是一个整数,
N/3
是一个整数,
N/3
是奇数(如非偶数)。这意味着如果执行模6,它必须是3

实际上这里有两种情况:

  • N
    不是整数,在这种情况下,我们会显示错误,也许我们也应该
    失败。因此:

    oddMultOf3(N) :- 
        \+ integer(N),
        !,
        print("ERROR: The given parameter is not an integer"),
        fail.
    
  • 否则,我们将检查
    N mod 6
    是否等于
    3

    oddMultOf3(N) :-
        3 is N mod 6.
    
或者把它放在一起:

oddMultOf3(N) :- 
    \+ integer(N),
    !,
    print("ERROR: The given parameter is not an integer"),
    fail.
oddMultOf3(N) :-
    3 is N mod 6.
然后我们在
swi
中获得:

?- oddMultOf3(171).
true.

?- oddMultOf3(100).
false.

?- oddMultOf3(12).
false.

?- oddMultOf3(4.2).
"ERROR: The given parameter is not an integer"
false.

?- oddMultOf3(-9).
true.

这是三的奇数倍吗?
Y是N模3,Y=0
建立了3的倍数。现在,您认为如何确定
N
是奇数?只要加上那个条件就行了。@lowerer是的,那么就加上一个条件来检查N mod 2是否为0?因为示例30是3的倍数,这是偶数。非常感谢,但是当我厌倦了你的代码时,它会给我错误的结果,例如:oddMultOf3(171)。必须是真的但在你的密码里给了我false@user8286060:固定。