首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套let或let*在方案中的使用

嵌套let或let*在方案中的使用
EN

Stack Overflow用户
提问于 2015-08-24 03:41:08
回答 1查看 2.3K关注 0票数 4

我正在编写一个函数,以一个间隔作为参数,并返回百分比错误,但我坚持使用let或let*。下面是代码:

嵌套let版本:

代码语言:javascript
复制
(define (percent interval)
  (let (start-point (car interval))
    (let (end-point (cdr interval))
      (let (center (/ (+ start-point end-point) 2)))))
  (/ (- end-point center) center))

错误是: let: bad语法(不是绑定的标识符和表达式)在: start-point中

让*版本:

代码语言:javascript
复制
(define (percent interval)
  (let* ((start-point (car interval))
     (end-point (cdr interval))
     (center (/ (+ start-point end-point) 2))))
  (/ (- end-point center) center))

现在的错误是:

代码语言:javascript
复制
let*: bad syntax (missing body) in: (let* ((start-point (car interval)) (end-point (cdr interval)) (center (/ (+ start-point end-point) 2))))

我参考了一些文档,但也找不出错误。(ps:我使用的是DrRacket 6.2)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-24 03:52:17

最后一个表达式,即除法本身,需要进入let*内部。这是因为let表单引入的绑定只在词汇上限定为它们的身体。此外,let表单需要一个主体,这就是为什么您要得到该错误(在您的示例中,它们根本没有主体,因为最后的表达式在它们之外)。

要解决这个问题,只需在let*表单中移动最终表达式:

代码语言:javascript
复制
(define (percent interval)
  (let* ((start-point (car interval))
         (end-point (cdr interval))
         (center (/ (+ start-point end-point) 2)))
    (/ (- end-point center) center)))

使用嵌套let的版本在另一个方面略有错误:您丢失了每个绑定对的一个parens级别,这将导致第一个错误。也就是说,而不是这样:

代码语言:javascript
复制
(let (start-point (car interval))
  ...)

...you需要这样做:

代码语言:javascript
复制
(let ((start-point (car interval)))
  ...)

注意额外的括号。也就是说,let*版本要好得多!它只是一个嵌套的let表单的宏,可以自动进行嵌套,这样您就不必这样做了。

还有一件事:如果您正在编写可移植方案,那么所有的括号都必须是括号。不过,如果你在写球拍,你可以用方括号和括号互换。正因为如此,惯用的球拍在某些地方使用方括号作为一种文体选择,使代码更具可读性。

其中一个例子是let绑定对。因此,惯用的球拍代码应该如下所示:

代码语言:javascript
复制
(define (percent interval)
  (let* ([start-point (car interval)]
         [end-point (cdr interval)]
         [center (/ (+ start-point end-point) 2)])
    (/ (- end-point center) center)))

这只会有助于更清楚地表明,每对都在创建绑定,而不是调用函数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32174147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档