错误:Scheme中的未绑定变量

时间:2017-02-25 15:39:37

标签: scheme

我在Scheme

中有以下代码
(define (serie A B)
    (if (> A B)
        (
            (define AB (* A B))
            (write AB)
        )
        (
            (write "No")
        )  
    )
)

当我调用此函数时,会出现以下错误: prog.scm:5:53:未绑定变量

为什么会这样?

1 个答案:

答案 0 :(得分:3)

在Scheme中,与其他编程语言中的花括号不同,括号用于分隔代码块。并且你不能define另一个表达式中的变量(你只能在程序的开头才能做到);请改用let。构造和缩进代码的正确方法是:

(define (serie A B)
  (if (> A B)
      (let ((AB (* A B)))
        (write AB))
      (write "No")))

当然,你真的不需要局部变量,你应该直接写出乘法的结果:

(define (serie A B)
  (if (> A B)
      (write (* A B))
      (write "No")))

无论哪种方式,它都按预期工作:

(serie 10 20)
=> "No"
(serie 100 20)
=> 2000