(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))
; 作用的順序
(test 0 (p))
;=>
(test 0 (p))
;=>
(test 0 (p))
;=>.....
; (p) = (p) なので、以下、延々と評価がループする
; 実際、この式は無限ループになり,評価できない。
; 正規順序
(test 0 (p))
;=>
(if (= 0 0)
0
(p))
;=>
(if #t
0
(p))
;=>
0
(define (a-plus-abs-b a b)
((if (> b 0) + - ) a b))
(a-plus-abs-b 1 2)
;=> 3
(a-plus-abs-b 1 -2)
;=> 3
; ((> b 0) + - ) の部分は
; b が正の数なら +演算子を、bが0以下の場合は -演算子を返す。
; 返された演算子を使って、そのまま評価が可能。
(define (square n)
(* n n))
(define (pythagoras a b)
(+ (square a) (square b)))
(define (max-square a b c)
(cond ((= (min a b c) a) (pythagoras b c))
((= (min a b c) b) (pythagoras a c))
((= (min a b c) c) (pythagoras a b))))
;テスト
(max-square 2 3 4) ;=> 25
(max-square 12 3 4) ;=> 160
(max-square 2 12 22) ;=> 628
(max-square 2 2 2) ;=> 8
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| - | - | 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | - | - |
Author:fkmn
FC2ブログへようこそ!