再帰理論
こちらもただのお遊びです。
今回はHaskellを選びました。
-- 後者関数は原始再帰関数 suc = (1 +) -- 射影関数は原始再帰関数 u1_1 x = x u3_1 (x, _, _) = x u3_2 (_, x, _) = x u2_1 (x, _) = x u2_2 (_, x) = x -- 加算関数 x +. 0 = u1_1 x x +. (y + 1) = suc $ u3_2 (x, (x +. y), y) -- zeroも原始再帰関数 zero x = 0 -- 乗算関数 x *. 0 = zero x x *. (y + 1) = u3_2 (x, (x *. y), y) +. u3_1 (x, (x *. y), y) -- 階乗関数 fac 0 = 1 fac (x + 1) = f (x, fac x) where f arg = (suc $ u2_1 arg) *. u2_2 arg -- 前者関数 pd 0 = 0 pd (x + 1) = x -- 減算関数 x -. 0 = x x -. (y + 1) = pd (x -. y) -- 最小、最大、絶対値 min' (x, y) = x -. (x -. y) max' (x, y) = (x +. y) -. min' (x, y) abs' (x, y) = (x -. y) +. (y -. x) main = do print $ 4 +. 6 print $ 16 *. 16 print $ fac 5 print $ 10 -. 5 print "-----" print $ min' (3, 4) print $ max' (3, 4) print $ abs' (3, 4)
10Haskell触ったのいつぶりだろう!
256
120
5
"-----"
3
4
1
n + k パターンを初めて有効活用した気がします。