我是一个方案初学者
请问这段scheme代码怎么解释?看起来很古怪!
(define (calc2 exp)
(match exp
[(? number? x) x]))
我知道 match 给出了一个模式,但是如何解释这个奇怪的模式?
(? number? x)
谢谢!
最佳答案
模式 (? expr pat ...)
是 match
宏语法的一部分。它将 expr
应用于模式并检查结果是否为真值。在这种情况下,这意味着它将检查 (number? x)
是否返回 true,其中 x
是 exp
。如果是,该函数将返回您作为 exp
传递给它的任何内容。如果不是,它将引发匹配异常。
换句话说,calc2 只是为传递给它的任何非数字值引发异常,否则返回它的参数。有关模式匹配如何在 Racket 中工作的更多信息,请查看 http://docs.racket-lang.org/reference/match.html
关于functional-programming - 方案模式检查它是否是一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16456560/