1

式を取得し、それを標準形式に変換しようとしています。私の目的をより明確にするために、次のような式の一般的なスタイルを定義するとします。

∑(a*b) // 積の合計

(a+b)*(c+d) のような形式ではない入力が与えられた場合は、最初にそれを正規化する必要があります (実際には単純な例であり、私の場合ではありません)。すでに ML で記述されたコードが長すぎます。ここでいくつかのスニペットを見ることができます:

rew(p_choice(x,p_nil)) = rew(x) |
rew(p_choice(p_nil,x)) = rew(x) |
rew(p_sum(d,p_nil)) = p_nil |
rew(p_sum(d,p_choice(x,y))) = rew(p_choice(rew(p_sum(d,x)),rew(p_sum(d,y)))) 
rew(p_cond(b,p_nil,p_nil)) = p_nil |
rew(p_cond(b,p_choice(x,y),p_nil)) =rew(p_choice(rew(p_cond(b,x,p_nil)),rew(p_cond(b,y,p_nil)))) |
rew(p_cond(b,p_sum(x,y),p_nil)) = rew(p_sum(x,rew(p_cond(b,y,p_nil)))) |
rew(p_cond(b1,p_cond(b2,x,p_nil),p_nil)) = rew(p_cond(b1 andalso b2, x,p_nil)) |
rew(p_cond(b,x,p_nil)) = p_cond(b,x,p_nil) |
rew(p_cond(b,x,y)) =
    rew(p_choice(rew(p_cond(b,x,p_nil)),rew(p_cond(not(b),y,p_nil)))) 

私の質問は、Haskell がこのコードをより適切に実行するのに役立つ機能を導入していないかということです。

4

1 に答える 1