是什么意思 '?'在球拍文档中?

时间:2019-03-07 09:23:20

标签: racket

Example

(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

1 个答案:

答案 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?))

此函数以任何顺序返回包含任意数量的这些不同对象的列表。

注释

将谓词始终以?结尾是一种好习惯。

尽管在我的示例中,您可能已经注意到listofor/c没有问号。这是因为它们不是谓词本身,而是构建谓词的函数。

在大多数Lisp语言中,例如Scheme,Racket,Clojure或Common Lisp,许多在其他语言中具有特定含义的符号只是有效的标识符。变量和函数名称中都允许使用?=-->+