Functional programming 如何用纯语言定义地图融合?

Functional programming 如何用纯语言定义地图融合?,functional-programming,pattern-matching,Functional Programming,Pattern Matching,我正在试验基于术语重写的语言 我想用一个等式来定义,比如: > map f (map g list) = map (f . succ . g) list; (此处的succ用于验证规则是否生效。) 但是,它似乎不起作用: > map id (map id [2,3,4]); [2,3,4] 报告说 表达式使用“最左边最里面”的缩减策略进行计算 所以我想现在发生的是,最里面的映射id[2,3,4]表达式首先被缩减,所以我的规则永远不会生效 那么,如何让地图融合工作呢 这是一个相关的

我正在试验基于术语重写的语言

我想用一个等式来定义,比如:

> map f (map g list) = map (f . succ . g) list;
(此处的
succ
用于验证规则是否生效。)

但是,它似乎不起作用:

> map id (map id [2,3,4]);
[2,3,4]
报告说

表达式使用“最左边最里面”的缩减策略进行计算

所以我想现在发生的是,最里面的
映射id[2,3,4]
表达式首先被缩减,所以我的规则永远不会生效

那么,如何让地图融合工作呢

这是一个相关的实验。第一条规则不起作用:

> a (b x) = "foo";
> b x = "bar";
> a (b 5);
a "bar"
我应该仔细阅读。我需要做的是使用
def
关键字将模式转换为宏。通过这种方式工作:

> def map f (map g list) = map (f . succ . g) list;
> map id (map id [2,3,4]);
[3,4,5]