我正在试验基于术语重写的纯净语言。
我想使用一个等式来定义“地图融合”,如下所示:
> map f (map g list) = map (f . succ . g) list;( succ是用来验证规则是否生效的。)
然而,它似乎不起作用:
> map id (map id [2,3,4]);
[2,3,4]纯人工说
表达式使用“最左-最内”的缩减策略进行计算。
所以我想现在发生的事情是,最内部的map id [2,3,4]表达式是先减少的,所以我的规则永远不会生效。
那么,如何使地图融合工作呢?
这是一个相关的实验。第一条规则并不适用:
> a (b x) = "foo";
> b x = "bar";
> a (b 5);
a "bar"发布于 2015-04-28 19:45:10
我应该更仔细地阅读手册。我需要做的是使用def关键字将模式转换为宏。它的工作方式如下:
> def map f (map g list) = map (f . succ . g) list;
> map id (map id [2,3,4]);
[3,4,5]https://stackoverflow.com/questions/29912758
复制相似问题