ifの再定義
booleanとif文も全部関数だけで実現できちゃった。
やってみた。
gosh> (define (true x y) x) true gosh> (define (false x y) y) false gosh> (define (if f x y) (f x y)) if gosh> (if true 1 2) 1 gosh> (if false 1 2) 2
ホントダ。
lambdaだけにする。
gosh> ((lambda (f x y) (f x y)) (lambda (x y) x) 1 2) 1 gosh> ((lambda (f x y) (f x y)) (lambda (x y) y) 1 2) 2
Cでもやってみよう〜。
#include <stdio.h> int my_true(int x, int y) { return x; } int my_false(int x, int y) { return y; } int my_if(int (*f)(int, int), int x, int y) { return f(x, y); } int main(void) { printf("%d\n", my_if(my_true, 1, 2)); printf("%d\n", my_if(my_false, 1, 2)); return 0; }
無名関数が無いのでここまで。
えい。
1 2
うっは。
調子に乗ってきたのでマクロで。
#include <stdio.h> #define true(x, y) x #define false(x, y) y #define if(b, x, y) b(x, y) int main(void) { printf("%d\n", if(true, 1, 2)); printf("%d\n", if(false, 1, 2)); return 0; }
いけぃ!!
1 2
おぉぉぉぉ。
しかし・・・
gosh> (define (f) (f)) f gosh> (if true 1 (f)) ...無限ループ
となってしまうため、ifは再定義出来ないのであった。残念!!
続く。