我正在尝试获取表达式并将其转换为标准形式。为了更好地阐明我的目的,假设您为表达式定义了一个通用样式,如下所示:
∑(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 是否引入了任何可以帮助更整洁地完成代码的功能?