#function #racket #lazy-evaluation
#функция #рэкет #ленивая оценка
Вопрос:
Другими словами, существует ли функция, f
такая f x
, которая не вычисляет x и просто возвращает void? Я пытался реализовать что-то подобное с помощью (define (ignore x) (if true void x))
, но он по-прежнему вычисляет x .
Комментарии:
1. Racket — это строго вычисляемый язык, поэтому вы не можете сделать то, что вы описываете, с помощью функции, но вы можете сделать это с помощью макроса. Например, что-то вроде
(define-syntax-rule (ignore x) (void))
должно делать то, что вы ожидаете. Тем не менее, это довольно бесполезный макрос.2. Как раз то, что мне было нужно, спасибо.
3. Почему бы просто не удалить форму целиком, если ее там не должно быть?
Ответ №1:
Вы также можете использовать
(when #f x)
который не требует определения макроса. Это имеет то преимущество, что кому-то, читающему ваш код, не нужно смотреть на определение вашего макроса.
В Racket есть макрос #;
reader для закомментирования выражений; подумайте, может ли это иметь смысл. Например,
> ( 1 2 #;3 4)
7