使用“let star”的球拍语法错误

Posted

技术标签:

【中文标题】使用“let star”的球拍语法错误【英文标题】:Racket syntax error using 'let star' 【发布时间】:2018-05-18 16:21:37 【问题描述】:

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

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]))     

【问题讨论】:

您是否忘记在 DrRacket 中选择非教学语言? 请在您的帖子中插入代码作为文本,而不是图像。 您使用哪种语言?例如,它是写#lang racket 还是别的什么? 【参考方案1】:

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

根据球拍指南,let* 的语法是

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

请注意您要绑定的标识符缺少的 () 括号,以及您移动的关闭 )

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

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

显然我已经留下了... 供你填写。

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

【讨论】:

以上是关于使用“let star”的球拍语法错误的主要内容,如果未能解决你的问题,请参考以下文章

求助大神,命令行选项语法错误,怎么解决

编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理

let 中的球拍创建函数/lambda

MySQL 语法错误 |您的 SQL 语法有错误;

语法分析器可以发现语法错误

pycharm2022.3.1python2语法错误