boolean?
является предикатом.Это функция, которая (по соглашению) имеет в конце вопросительный знак, чтобы показать, что ее можно использовать для проверки типа значения и возврата логического значения, например:
> (boolean? #f)
#t
> (boolean? "hello")
#f
По умолчанию Racket isдинамически типизированный, поэтому для отображения информации о типе в документации предикаты используются в качестве аннотации типа .
Таким образом, (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, многие символы, имеющие определенные значения в других языках, просто допустимыидентификаторы.?
, =
, -
, ->
, +
разрешены внутри имен переменных и функций.