LINUX.ORG.RU

История изменений

Исправление 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