【问题标题】:Odd Multiple of 3 in prolog序言中3的奇数倍数
【发布时间】:2017-07-19 14:59:06
【问题描述】:

我需要有人可以帮助如何在 Prolog 中做 3 的奇数倍数

定义一个谓词oddMultOf3/1,确定一个整数是否是 3 的奇数倍数。用户应该能够输入谓词 带整数,例如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 mod 3,Y=0。

【问题讨论】:

  • 这怎么是三的奇数倍?
  • Y is N mod 3, Y = 0 确定了 3 的倍数。现在您认为您如何确定 N 是奇数?只需添加该条件即可。
  • @lurker 对,那么添加一个条件来检查N mod 2是否为0呢?因为例如 30 是 3 的倍数,它是偶数。

标签: prolog


【解决方案1】:

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

这里其实有两种情况:

  • 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.

【讨论】:

  • 非常感谢,但是当我厌倦了你的代码时,它给了我错误的结果,例如:oddMultOf3(171)。必须是真的,但在你的代码中给了我错误
  • @user8286060:已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多