【问题标题】:The While Loop in RacketRacket 中的 While 循环
【发布时间】:2020-06-10 17:13:07
【问题描述】:

在 Racket 中编写一个类似于 Java 等语言中的“while 循环”的过程。 while 循环需要两段代码来运行:一个条件和一个主体。它运行身体,然后再次尝试条件,如果它是真的,再次运行身体。这一直持续到条件返回 false。

这就是我开始的方式:然后我被卡住了。

(define (while condition body)
   (when (true? condition)
       (cons (proc body) (proc (rest body)))

【问题讨论】:

  • 这能回答你的问题吗? While Loop Macro in DrRacket
  • 这是一个重复的问题。在询问之前,请至少搜索您的问题。

标签: loops while-loop scheme conditional-statements racket


【解决方案1】:

conditionbody 是过程,所以你必须调用它们。

调用body后,必须递归调用while才能重复。

(define (while condition body)
  (when (condition)
    (body)
    (while condition body)))

您不需要true?,因为when 只是检查条件是否为#f

【讨论】:

    【解决方案2】:

    在Scheme中while必须用宏来实现以避免对args的求值

    (define-syntax while
      (syntax-rules ()
        ((_ pred b1 ...)
         (let loop () (when pred b1 ... (loop))))))
    

    【讨论】:

    • 要求OP写一个过程,而不是宏;在这种情况下,conditionbody 表示过程,即它们评估为将在 while 中使用的过程。
    • 好的,谢谢。但是你不能做一个真正的 While 或 Do with 过程,除非你说条件和身体评估过程。但我并没有真正看到它的用途。最初的问题是关于 java 之类的,用于在方案中使用宏进行相同的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多