(.)新しい問題

それでは,前日出してもらった新しい問題

k x y = f (g x) (h y)

を,x,yを用いずに表してみます.


今回は,

f = (+)
g = succ
h = abs

とします.


とりあえず,yをなくす.

k x y = (f (g x)) (h y)
k x y = ((f (g x)) . h) y
k x = (f (g x)) . h

よし,次にxをなくす.

k x = (. h) (f (g x))
k x = (. h) ((f . g) x)
k = (. h) . (f . g)
k = (. (f . g)) (. h)

ラストは,f,g,hを並べるためにしただけです.
ではこれで合ってるか確認*1
確認用に,

l x y = f (g x) (h y)

としておきます.

Main> k 4 (-4)
9
Main> l 4 (-4)
9

一致したということは,lとkは同じ動きをしてる事になりますね.

Main> :set +s
Main> k 4 (-4)
9
(56 reductions, 73 cells)
Main> l 4 (-4)
9
(51 reductions, 65 cells)

リダクションが少し多いのね.

*1:と言いながら,合ってるのを確認した上で書いてるんですけどね:-p