使用' let star'的球拍语法错误

时间:2017-12-05 04:49:46

标签: syntax racket let

在下面列出的程序中,我收到错误消息:

让*:错误的语法(不是绑定的标识符和表达式):pokemon1inPokedex

我不确定为什么,任何建议都会受到赞赏!

my code

(define (in-order? pokemon1name pokemon2name)
  (let*
    [pokemon1inPokedex (inPokedex? pokemon1name)]
    [pokemon2inPokedex (inPokedex? pokemon2name)])
  (cond [(and pokemon1inPokedex pokemon2inPokedex) (greater pokemon1name pokemon2name)]
        [(true? pokemon1inPokedex) #t]
        [(true? pokemon2inPokedex) #f]
        [else #f]))     

1 个答案:

答案 0 :(得分:2)

问题是您使用let*的语法不正确。

在球拍指南中,let*的语法是

(let* ([id val-expr] ...) body ...+)

请注意您所绑定的标识符缺少()个parens,以及您移动的结束)

修改示例以正确使用let*表单将导致代码如下所示:

(define (in-order? pokemon1name pokemon2name)
  (let* ([pokemon1inPokedex ...]
         [pokemon2inPokedex ...])
    (cond [(and pokemon1inPokedex) ...]
          [pokemon1inPokedex ...]
          [pokemon2inPokedex ...]
          [else ...]))

显然我已离开...让你填写。

作为旁注,pokemon1inPokedex并没有真正遵循我所知道的任何正常的Racket命名约定。在Racket中关注standard naming conventions会给您pokemon1-in-pokedex?