with-syntax:绑定匹配失败 - Scheme错误?

时间:2016-09-13 14:56:19

标签: scheme

我不确定这里出了什么问题,我相信我的语法是正确的,但我不知道这个错误是什么意思。

(define (even-nm-inst? n)
(cond ((= n 2) #t)
    ((= n 4) #t)
    ((= n 6) #t)
    ((= n 8) #t)
    ((= n 10) #t)
    ((> n 2)
     (modulo n 2)
     (cond ((= n 0) #t)
     (cond ((= n 1) #f)
    ((< n 2)            
     (modulo n 2)       
     (cond ((= n 0) #t)
           ((= n 1) #f)
           )))))))

我试图创建一个确定数字是否均匀的函数。

返回的具体错误是: 即可。 ../../Applications/Racket v6.6 / share / pkgs / r5rs-lib / r5rs / main.rkt:493:22:with-syntax:绑定匹配失败:(_。rest) < / p>

知道发生了什么事吗?我知道它是代码的这个特定部分,因为我在不同的部分有标题,错误出现在这个块的标题下。

在此先感谢,我是一个崭新的计划。

3 个答案:

答案 0 :(得分:1)

嗯,这是一个不可原谅的错误语法错误......

但另一方面,您似乎正在使用极其传统的R5RS语言。如果那是因为你在课堂上并且你的教练需要它,那么你就会坚持下去。如果没有,你应该尽快切换到主要的Racket语言或Beginning Student语言;他们俩都不应该给你这个可怕的信息。

具体来说,在Beginning Student语言中,您将收到以下消息: &#34; cond:期望一个带有问题和答案的条款,但找到一个包含3个部分的条款&#34; ......它突出了该条款的三个部分,即问题。

答案 1 :(得分:1)

由于您正在使用DrRacket,为什么不按 CTRL + i 并根据您所写的内容格式化代码而不是您想要的格式已经写了。结果是:

p.STOCK_RIC, p.WEEK_NUMBER

现在。如果使用(define (even-nm-inst? n) (cond ((= n 2) #t) ((= n 4) #t) ((= n 6) #t) ((= n 8) #t) ((= n 10) #t) ((> n 2) (modulo n 2) ; doesn't do anything since result not used (cond ((= n 0) #t) (cond ((= n 1) #f) ; cond doesn't exist as a variable ((< n 2) (modulo n 2) (cond ((= n 0) #t) ; cond doesn't exist as a variable ((= n 1) #f) ))))))) 不是一个选项我会写这个:

even?

您使用modulo,它可用于生成没有任何条件的结果:

(define (my-even? n)
  (cond ((negative? n) (my-even? (- n)))
        ((zero? n) #t)
        ((= n 1) #f)
        (else (my-even? (- n 2)))))

(my-even? -5) ; ==> #f
(my-even? 10) ; ==> #t

答案 2 :(得分:0)

不,这不正确 - 你的cond到处都是,而且显然让Racket感到困惑。

根本不清楚为什么你写了所有代码;

(define (even-nm-inst? n)
    (= (modulo n 2) 0))

会使用even?