在Racket中if-then-else的语法

0 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))
Run Code Online (Sandbox Code Playgroud)

所以我在DrRacket上编译它,但它没有做任何事情.该(if (< x 5) 'x+1 'x*2))-Part被标记为黑色!我认为问题就在'于此.

amo*_*mon 8

在Lisps中,它'quote操作符的简写,它可以防止对S表达式或符号进行求值.虽然x通常是一个变量,引用它会把它变成一种轻量级的字符串.引号不是if语法的一部分.在你的情况下使用引用是没有意义的.

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

那么我们的功能将如下所示:

(define (number x)
  (if (< x 4)
      (+ x 1)
      (* x 2)))
Run Code Online (Sandbox Code Playgroud)