2021年2月8日月曜日

Fokkingのmutual recursion theorem 圏論でElm

 圏論学習会第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 件のコメント:

コメントを投稿