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]