首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell CPS编程风格问题

Haskell CPS编程风格问题
EN

Stack Overflow用户
提问于 2010-07-09 00:27:08
回答 2查看 346关注 0票数 3

下面是使用CPS样式将列表中的元素相乘的函数

代码语言:javascript
复制
mlist xx k = aux xx k
  where aux [] nk = nk 1
    aux (0:xs) nk = k 0
    aux (x:xs) nk = aux xs $ \v -> mul x v nk

如果我在表达式aux (0:xs) nk =k0中将‘k’改为'nk',两者之间有什么区别呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-09 00:51:15

k始终是传递给mlist的原始延续,而对于列表1,0 nk在这种情况下将是\v -> mul 1 v k (来自aux的第三种情况)。

如果我们假设mul被定义为mul x y k = k $ x*y,这将不会产生实际影响,因为y总是为0。但是,获得该结果的实际方法是不同的(除非编译器可能进行优化)。

票数 4
EN

Stack Overflow用户

发布于 2010-07-09 07:34:16

不同之处在于,最初的定义是“短路”--任何由尾叫应用程序传递的累积乘法,而变化的表达式只测试值--它保持连续函数的累积“版本”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3209026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档