(number? v) → boolean?
v : any/c
我了解“?”在'number'后面的第二个'?',在'boolean'后面的第二个使我恼火。这是否意味着它也许返回布尔值,也许不是?
为清晰起见
我来自Python,对我来说,它的意思是:is_number::function returns is_boolean::function
,而不是is_number::function returns bool::bool
。
解决方案
正如杰罗姆(Jérôme)解释的那样,其内容为:
is_number(v) returns b where is_boolean(b) == True
答案 0 :(得分:4)
boolean?
是一个谓词。该函数的末尾带有(按惯例)问号,以表明它可用于检查值的类型并返回布尔值,如下所示:
> (boolean? #f)
#t
> (boolean? "hello")
#f
默认情况下,Racket是动态键入的,因此为了在文档中显示类型信息,谓词用作一种类型注释。
因此,基本上,(number? v) → boolean?
的意思是“函数number?
返回一个值,该值在传递给谓词boolean?
时返回true”。
当您具有更复杂的谓词时,它将变得很有用:
(pick-random-stuff bag?) → (listof (or/c toy? food? paperclip? aligator?))
此函数以任何顺序返回包含任意数量的这些不同对象的列表。
将谓词始终以?
结尾是一种好习惯。
尽管在我的示例中,您可能已经注意到listof
和or/c
没有问号。这是因为它们不是谓词本身,而是构建谓词的函数。
在大多数Lisp语言中,例如Scheme,Racket,Clojure或Common Lisp,许多在其他语言中具有特定含义的符号只是有效的标识符。变量和函数名称中都允许使用?
,=
,-
,->
,+
。