Scheme DrRacket程序正文帮助(布尔奇数?x)

Scheme DrRacket程序正文帮助(布尔奇数?x),scheme,racket,Scheme,Racket,奇数的迭代版本?对于非负整数,可以使用and、or和not编写参数。要做到这一点,您必须利用and和or是按从左到右的顺序计算其参数的特殊形式这一事实,一旦确定了值就立即退出。写入(布尔奇数?x)时不使用if或cond,而是使用and、or、not(布尔值)。您可以使用+和-,但不能使用商、余数、/等。如果两个数等分,则数字为偶数;如果一个数的余数为1,则数字为奇数。一般来说,当你将一个数k除以一个数n时,余数是集合{0,1,…n-1}的一个元素。您可以通过询问当k除以n时,余数是否在某个特权余

奇数的迭代版本?对于非负整数,可以使用and、or和not编写参数。要做到这一点,您必须利用and和or是按从左到右的顺序计算其参数的特殊形式这一事实,一旦确定了值就立即退出。写入(布尔奇数?x)时不使用if或cond,而是使用and、or、not(布尔值)。您可以使用+和-,但不能使用商、余数、/等。

如果两个数等分,则数字为偶数;如果一个数的余数为1,则数字为奇数。一般来说,当你将一个数k除以一个数n时,余数是集合{0,1,…n-1}的一个元素。您可以通过询问当k除以n时,余数是否在某个特权余数值集中来概括您的问题。由于这几乎可以肯定是一个家庭作业,我不想直接回答你的问题,但我将回答这个更一般的版本,而不受仅使用
的限制

(define (special-remainder? k n special-remainders)
  (if (< k n)
      (member k special-remainders)
      (special-remainder? (- k n) special-remainders)))
(定义(特殊余数?k n特殊余数)
(如果(

这个
特殊余数?
递归地将
k
除以
n
,直到找到小于
n
的余数。然后测试
n
的特殊性。在您考虑的情况下,您将能够消除
特殊余数
,因为您不需要
(成员k特殊余数)
。由于您只有一个特殊余数,您只需检查
k
是否为该特殊余数。

正奇数可以定义为1+2n。因此,奇数是:

  • 如果x是1
  • 如果x大于1且
x-2为奇数 因此,一个尾部递归/迭代的*解决方案如下所示:

(define (odd? x)
  (or (= ...)          ; #t if 1
      (and ...         ; #f if less than 1
           (odd? ...))); recurse with 2 less

*在使用它之后,有很多方法可以做到这一点,但仍然是迭代的,并且没有if/cond。

我在这里只看到说明。有问题吗?如果您已经编写了代码,请注意:“关于您编写的代码问题的问题必须在问题本身中描述特定的问题,并包括重现问题的有效代码。”如果您没有,请注意“询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案,为什么它们不起作用,以及预期的结果。“到目前为止你做了什么?什么不起作用?(在这里定义(布尔奇数?x)你的_代码_)这是我们应该编写代码的地方。我写的正是我论文中写的内容。写正文时不使用if或cond,而是使用and,or,not(布尔值)相反。你可以使用+和-,但不要使用商、余数、等。我不知道我能做什么。这只是一个家庭作业,我不知道如何处理好它,如果是家庭作业,它大概是针对某种类型的类。到目前为止,这个类涵盖了什么?我们已经学习了递归和迭代函数。例如阶乘、乘法我们开始cons、car、cdr的那天。我们做了配对和配对列表。以最奇怪的方式将配对放入列表中。DenizAydemir请确保只有在这个答案对你真正有用的情况下你才会接受。我理解为什么(根据评论)你可能不接受另一个答案,但你也可以选择不接受任何答案。只有当这确实帮助你理解如何解决这个问题时,你才可以接受这个答案。