プログラミング言語の基礎概念オンライン演習

似たような箇所を不用意にコピーして、構造が崩れて死んだ。

後から解析出来ねー。

手動でやる場合、同じレベルの変換を終わらせずに、下位のレベルの変換に行くとどこやってなかったか分からなくなって死ぬ。



No53でYコンビネータっぽいのが出て来た。
フツーに式変形してるとself self and selfで元のfactがどっか行ってしまって混乱して死んだ。

    fact = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)] |- fact fact evalto (fact = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)], self = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)])[fun n -> if n < 2 then 1 else n * self self (n - 1)] by E-AppRec {
      fact = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)] |- fact evalto ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)] by E-Var1 { };
      fact = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)] |- fact evalto ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)] by E-Var1 { };
      fact = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)], self = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)] |-
                      fun n -> if n < 2 then 1 else n * self self (n - 1)
                      evalto (fact = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)], self = ()[rec fact = fun self -> fun n -> if n < 2 then 1 else n * self self (n - 1)])[fun n -> if n < 2 then 1 else n * self self (n - 1)] by E-Fun {};
    };

訳わからん過ぎて死ぬ。

self = ()[rec fact = fun.....
という変形がアカン気がする。ような気がする。
寝よ。

    • -

落ち着いてやれば、難しいというほどでもなかった。