圏論学習会第8回のFokkingaの相互再帰定理を使ったsteep関数(例題)の実装を、Elmで確かめてみた。
T ← F(T)
<steep,sum> ↓ ↓
Bool×Int ← F(Bool×Int)
<[c,f],[d,g']>
<steep,sum>=(| <[c,f],[d,g']> |) ←Catgamorphism
※foldのイメージは、Listから一つずつaを取り出し、(b,s)のタプル つまり(Bool×Int):steepとsumの結果のペアに、適用して畳み込んでいく(積み重ねていく)というイメージ
> c=(True,0)
(True,0) : ( Bool, number )
> fnx a (b,s) = ( a > s && b , a + s)
<function> : number -> ( Bool, number ) -> ( Bool, number )
> lst2=[32,16,8,4,2]
[32,16,8,4,2] : List number
> Tuple.first (List.foldr fnx c lst2)
True : Bool
> lst3=[32,16,8,4,4]
[32,16,8,4,4] : List number
> Tuple.first (List.foldr fnx c lst3)
False : Bool
foldも奥が深い。
0 件のコメント:
コメントを投稿