2017-07-19 32 views
1

我需要有人可以帮助如何在序言奇数倍

Define a predicate oddMultOf3/1 that determines whether an integer is an odd multiple of 3. A user should be able to enter the predicate with an integer, e.g. oddMultOf3(42) and evaluate to either true or false. If the given parameter is not an integer, your predicate should display the message “ERROR: The given parameter is not an integer”.

做3奇数倍,他们要求我做这

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 is N mod 3, Y=0.

+0

这是三倍的奇数倍吗? –

+0

'Y是N模3,Y = 0'是3的倍数。现在你怎么认为你可能确定'N'是奇数?只需添加该条件即可。 – lurker

+0

@lurker对,所以添加一个条件来检查N mod 2是否为0呢?因为例如30是偶数的3的倍数。 –

回答

1

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

居然有2箱子这里:

  • N不是整数,在我们显示错误的话,也许我们应该也是fail。所以:

    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. 
+0

非常感谢,但是当我厌倦了你的代码时,它给了我错误的结果,例如:oddMultOf3(171)。必须是真实的,但在你的代码给我虚假 – user8286060

+0

@ user8286060:固定。 –