functional-programming - 方案模式检查它是否是一个数字

标签 functional-programming lisp scheme pattern-matching racket

我是一个方案初学者

请问这段scheme代码怎么解释?看起来很古怪!

(define (calc2 exp)
   (match exp                                
     [(? number? x)  x]))

我知道 match 给出了一个模式,但是如何解释这个奇怪的模式?

 (? number? x) 

谢谢!

最佳答案

模式 (? expr pat ...)match 宏语法的一部分。它将 expr 应用于模式并检查结果是否为真值。在这种情况下,这意味着它将检查 (number? x) 是否返回 true,其中 xexp。如果是,该函数将返回您作为 exp 传递给它的任何内容。如果不是,它将引发匹配异常。

换句话说,calc2 只是为传递给它的任何非数字值引发异常,否则返回它的参数。有关模式匹配如何在 Racket 中工作的更多信息,请查看 http://docs.racket-lang.org/reference/match.html

关于functional-programming - 方案模式检查它是否是一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16456560/

相关文章:

types - 是否有静态类型的函数语言?

LISP 程序输出

scheme - Sublime Text 2 with MIT Scheme

list - 方案将条目转换为列表

scheme - 在方案中对列表进行排序

java - Java 流是否仅用于数组?单元素呢?

c++11 - 是否可以在 C++11 中将函数组合成一个新函数?

lisp - CHLS“最里面的反引号形式应首先扩展”的含义

lisp - 我是一个 lisp 新手,我需要一个哈希表类。

java - 将数据从一种数据结构映射到另一种数据结构