Как проверить тип в ракетке? - PullRequest
0 голосов
/ 14 ноября 2018

Я определяю функцию

(define 1-9 (list->set (range 1 10)))

Я хочу посмотреть, действительно ли 1-9 набор. Как я могу получить тип 1-9?

Я пытался проверить тип проверки Google, но не могу найти какую-либо полезную информацию.

1 Ответ

0 голосов
/ 15 ноября 2018

#lang racket динамически набирается. С практической точки зрения это означает, что вы, как правило, не заботитесь (не должны) о «типе» некоторого значения.

Вместо этого (как указал Алекс) вы присваиваете значение «предикатной» функции, такой как list?. Если предикат возвращает true, тогда вы можете пойти дальше и сделать list -y вещи со значением - передать значение функциям, которые ожидают list.

Это гораздо полезнее и надежнее, чем иметь что-то вроде (typeof value), которое возвращает магические символы, такие как List. В конце концов, вас волнует, что вы можете сделать со значением. Предикат говорит вам это. И предикат допускает значения, которые могут использоваться более чем одним способом (например, как список и как набор, оба).


p.s. Это похоже на то, почему номера версий (например, семантическое управление версиями) настолько глупы. Учитывая некоторую установленную библиотеку, вас действительно волнует, обеспечивает ли она определенные функции и поведение. Вы хотите спросить фактическую установленную библиотеку, предоставляете ли вы функцию X - не использовать какое-то магическое число и внешнюю информацию, чтобы угадать.


p.p.s. Что если вы хотите сериализовать значения (записать и прочитать их в файл)? Вам нужно выбрать способ представления каждого значения. В Racket один из подходов состоит в том, чтобы использовать печатное представление примитивных значений и что-то наподобие сборных структур для других - затем используйте write и read. Также есть racket/serialize. В любом случае, сериализация значений является относительно редкой вещью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...