【问题标题】:Partial sum in functional programming (recursion) [duplicate]函数式编程中的部分和(递归)
【发布时间】:2013-01-19 09:53:44
【问题描述】:

可能重复:
Partial sum in Standard ML?

我是函数式编程的新手,我的任务是计算列表的部分总和。例如。 - psum [1,1,1,1,1]; val it = [1,2,3,4,5] : int 列表

到目前为止,这是我的代码。但是我的函数只是返回列表原样。

 fun ppsum2([])=[]
| ppsum2(x::L) = x::ppsum2(L);


 exception Empty_List;

fun psum(L) : int list = 
if L=nil then raise Empty_List
else psum2(L);


psum([2,3,4]);  

【问题讨论】:

  • 你的代码肯定是这样缩进的吗? :( 无论如何,考虑[] -> [] 以完全避免异常。然后,考虑递归函数的基本情况和终止情况,以及给定输入的每一步的结果应该是什么。
  • 你说“sum”,但你根本没有用过+。试着在纸上手工评估ppsum2 [2,3,4],你就会明白为什么你会得到一个相同的列表。

标签: list recursion functional-programming ml


【解决方案1】:

由于这看起来像家庭作业,我希望这足够简单:

 fun psum2 [] total = []  
   | psum2 (h::t) total = (total+h) :: psum2 t (total+h)

 fun psum lst = psum2 lst 0

【讨论】:

    【解决方案2】:

    您可以查找 Haskells scanl1 函数的源代码,并将其翻译为 ML。

    这样,你学习的不是函数式编程,而是媒体能力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-12
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多