我对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被标记为黑色!我认为问题就在'于此.
在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)