zoukankan      html  css  js  c++  java
  • foldl foldr

    今天又继续多年没看的haskell了
    想起之前看书时候提到的
    foldr可以用于无穷序列,而foldl不行。一般情况下foldl效率比foldr高。
    之前一直没怎么理解。
     
    myfoldl f z [] = z
    myfoldl f z (x:xs) = myfoldl f (f z x) xs

    myfoldr f z [] = z
    myfoldr f z (x:xs) = f x (myfoldr f z xs)
     
    自己实现了一下,明显就可以看出myfoldl是一个尾递归,所以效率高
    myfoldr在某些运算,比如and 运算,在x为false就可以结束了。
    所以在某种情况下myfoldr可以用于无穷序列
     

    {- date:2013-02-21 -}
    今天写一个小程序的时候发现foldl,foldr是不能互换的(某些情况下
    可能是自己用的少,所以以前没发现吧!
    所以翻出了这篇。
     
    看foldl , foldr的那个函数!
    acc的位置是不一样的
    foldl的acc应该是左边那个参数!
    foldr的acc应该是右边那个参数!
     
    let a = "abcEG"
     
    foldl (\acc x -> acc + (if (isUpper x) then 1 else 0)) 0 a
    foldr (\x acc -> acc + (if (isUpper x) then 1 else 0)) 0 a
    by 1957
  • 相关阅读:
    面试问题总结
    2016后半年读书系统
    java基础知识
    自动化测试的误区
    软件测试的艺术
    QTP
    软件测试的艺术读书笔记
    Jquery中$(document).ready()
    Python爬取糗事百科示例代码
    【转载】气象数据相关资源
  • 原文地址:https://www.cnblogs.com/x1957/p/2921331.html
Copyright © 2011-2022 走看看