在Racket中if-then-else的语法

时间:2014-10-30 09:39:26

标签: syntax scheme racket

我对Racket有疑问。

(我正在使用http://docs.racket-lang.org/guide/conditionals.html上的教程)

我尝试编写一个执行此操作的函数:如果x小于4,则应该增加1,否则应该乘以2.

(define (number x)
  (if (< x 4) 'x+1 'x*2))

所以我在DrRacket上编译它,但它没有做任何事情。 (if (< x 5) 'x+1 'x*2)) - 部分标记为黑色!我认为问题是'事。

1 个答案:

答案 0 :(得分:8)

在Lisps中,'quote运算符的简写,它可以防止对S表达式或符号进行求值。虽然x通常是变量,但引用它会将其转换为一种轻量级字符串。引号不是if语法的一部分。在你的案例中使用引用是没有意义的。

此外,Lisps不使用中缀运算符。添加只是一个普通的功能,包括加法在内的所有内容都被写成S-Expression。因此,我们会写x + 1而不是(+ x 1)

因此我们的功能如下:

(define (number x)
  (if (< x 4)
      (+ x 1)
      (* x 2)))