球拍中if-then-else的语法
问题描述:
我在球拍上遇到了问题。球拍中if-then-else的语法
(我使用在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))
- 部分标记为黑色!我认为问题是'
的事情。
答
在Lisps中,'
是quote
运算符的简写形式,它可防止对S表达式或符号进行评估。虽然x
通常是一个变量,引用它变成一种轻量级的字符串。引号不是if
语法的一部分。在你的情况下使用引号是没有意义的。
此外,Lisps不使用中缀运算符。加法只是一个普通的函数,所有的东西,包括加法,都被写成S表达式。因此,我们会写(+ x 1)
而不是x + 1
。
因此,我们的功能会再看看这样的:
(define (number x)
(if (< x 4)
(+ x 1)
(* x 2)))