0

我正在尝试使用“定义语法规则”在球拍中创建自己的 while 循环。我希望它是基于程序的,所以没有辅助函数(即只使用 lambda、let、letrec 等)。

我有这个,但它给了我某种 lambda 标识符错误。

(define-syntax-rule (while condition body)
  (lambda (iterate)
    (lambda (condition body) ( (if condition)
                                   body
                                   iterate))))

我希望它是这样我可以像普通的while循环一样使用它例如:

(while (x < 10) (+ x 1))

在循环完成后调用它会(应该)返回 10。

如何修复我的代码以执行此操作?

4

1 回答 1

2

这是while我的标准前奏曲,以及它的使用示例:

Petite Chez Scheme Version 8.4
Copyright (c) 1985-2011 Cadence Research Systems

> (define-syntax while
    (syntax-rules ()
      ((while pred? body ...)
        (do () ((not pred?)) body ...))))
> (let ((x 4))
    (while (< x 10)
      (set! x (+ x 1)))
    x)
10

你可能应该和你的导师谈谈你对 Scheme 的误解。

于 2017-02-27T14:07:20.977 回答