История изменений
Исправление quasimoto, (текущая версия) :
Просили if-без-макросов, вроде.
А and и or - макросы
Которые [могут быть] определены через спец. форму if :)
А если наоборот (с примитивными булевыми операциями), то http://en.wikipedia.org/wiki/Multiplexer#Digital_multiplexers, то есть p && x || !p && y — лисповые and, or и not как раз подходящие:
(define (i p x y) (or (and p (x)) (and (not p) (y))))
(i #t (lambda () 1) (lambda () 2))
; 1
(i #f (lambda () (print 0) 1) (lambda () 2))
; 2
З.Ы. кстати в Scheme/Racket нифига не макросы.
Исходная версия quasimoto, :
Просили if-без-макросов, вроде.
А and и or - макросы
Которые [могут быть] определены через спец. форму if :)
А если наоборот (с примитивными булевыми операциями), то http://en.wikipedia.org/wiki/Multiplexer#Digital_multiplexers, то есть p && x || !p && y — лисповые and, or и not как раз подходящие:
(define (i p x y) (or (and p (x)) (and (not p) (y))))
(i #t (lambda () 1) (lambda () 2))
; 1
(i #f (lambda () (print 0) 1) (lambda () 2))
; 2