Для полноты: на языке Pico , например, нет специальных форм, а if
является примитивной функцией , тогда как Pico вдохновлен Scheme и по умолчанию готов к оценке .
В схеме вы могли бы написать
(define (true t f)
(t))
(define (false t f)
(f))
(define (function_if c t e)
(c t e))
, а затем
(function_if true (lambda () 'true) (lambda () 'false))
==> true
Что делает это управляемым в Pico, так это то, что вы можете определить функциональные параметры , которые принимают функциональные аргументы, которые "автоматически" задерживаются. Это означает, что вам не нужно делать обертывание внутри лямбды самостоятельно. Таким образом, Пико оценивает с энтузиазмом, но лениво оценивает по требованию, обходя необходимость в специальных формах.
Итак, в синтаксисе Scheme с функциональными параметрами вы можете кодировать логические значения как:
(define (true (t) (f))
(t))
(define (false (t) (f))
(f))
Тогда функция if становится:
(define (function_if c (t) (e))
(c (t) (e)))
и
(function_if true 'true 'false)
==> true
В качестве другого примера, определение функции and
равно (define (and p (q)) (p (q) false))
.
Аналогичным образом вы можете определить or
, not
, while
, for
, ... как функции, используя вышеуказанную кодировку логических значений.