Что значит "(? Символ? Имя)"? - PullRequest
1 голос
/ 27 марта 2011

У меня были проблемы даже при выборе заголовка для этого вопроса. Пожалуйста, не стесняйтесь редактировать его.

Я получил этот код Схемы и не понял этот блок.

(define (func b)
 (match b
   [(list (? symbol? x) rhs) ...

Проблемная часть (? Символ? X). Я предполагаю, что это какой-то компаратор, но я нигде ничего не нашел об этом! Трудно найти его, так как я не знаю, как назвать эту команду.

Я хотел бы получить хотя бы его имя, дальнейшие объяснения приветствуются. =)

Спасибо!

1 Ответ

1 голос
/ 27 марта 2011

Только что нашел!

Это особый случай синтаксиса (соответствия ...).Нашел его здесь: Сопоставление с образцом

Более конкретно:

(соответствует предложению val-expr ...)

предложение = [patexpr ... +]
|[pat (=> id) expr ... +]

Где pat это

pat :: = id [сопоставить что угодно, идентификатор привязки]
(...)
|(? expr pat ...) [match if (expr value) и pat]

Так что я был немного прав: он проверяет, является ли x символом.

Мне повезло!Пожалуйста, заполните эту тему!Большое спасибо!

...