#lang racket
динамически набирается. С практической точки зрения это означает, что вы, как правило, не заботитесь (не должны) о «типе» некоторого значения.
Вместо этого (как указал Алекс) вы присваиваете значение «предикатной» функции, такой как list?
. Если предикат возвращает true, тогда вы можете пойти дальше и сделать list
-y вещи со значением - передать значение функциям, которые ожидают list
.
Это гораздо полезнее и надежнее, чем иметь что-то вроде (typeof value)
, которое возвращает магические символы, такие как List
. В конце концов, вас волнует, что вы можете сделать со значением. Предикат говорит вам это. И предикат допускает значения, которые могут использоваться более чем одним способом (например, как список и как набор, оба).
p.s. Это похоже на то, почему номера версий (например, семантическое управление версиями) настолько глупы. Учитывая некоторую установленную библиотеку, вас действительно волнует, обеспечивает ли она определенные функции и поведение. Вы хотите спросить фактическую установленную библиотеку, предоставляете ли вы функцию X - не использовать какое-то магическое число и внешнюю информацию, чтобы угадать.
p.p.s. Что если вы хотите сериализовать значения (записать и прочитать их в файл)? Вам нужно выбрать способ представления каждого значения. В Racket один из подходов состоит в том, чтобы использовать печатное представление примитивных значений и что-то наподобие сборных структур для других - затем используйте write
и read
. Также есть racket/serialize
. В любом случае, сериализация значений является относительно редкой вещью.