再次回到另一个球拍问题。一般来说是高阶函数的新手,所以给我一些余地。
目前正在尝试使用foldr / foldl函数而不是递归来查找交替的和。
e.g。 (altsum'(1 3 5 7))应该等于1 - 3 + 5 - 7,总计为-4。
我想过几种可能的方法来解决这个问题:
但是,我不清楚当列表中的每个项目的每个操作都不相同时,从哪里开始使用foldl / foldr,所以我无法实现我的任何想法。另外,每当我尝试在我的foldl的匿名类中添加2个以上的变量时,我都不知道之后哪些变量引用了匿名类中的变量。
非常感谢任何帮助或指示。
答案 0 :(得分:1)
我们可以在此处使用两个高阶过程:build-list
用于处理列表,foldr
用于生成要执行的交替操作列表。请注意(define (altsum lst)
(foldr (lambda (ele op acc) (op acc ele))
0
lst
(build-list (length lst)
(lambda (i) (if (even? i) + -)))))
可以接受多个输入列表,在这种情况下,我们获取一个数字列表和一个操作列表,并按元素方式迭代它们,累积结果:
(altsum '(1 3 5 7))
=> -4
按预期工作:
tap
答案 1 :(得分:1)
你的想法没问题。您可以使用range
制作数字0到长度为1的列表,并使用每个数字的奇数来确定+
或-
:
(define (alt-sum lst)
(foldl (lambda (index e acc)
(define op (if (even? index) + -))
(op acc e))
0
(range (length lst))
lst))
作为替代方案,可以使用fold
circular-list
,+
允许使用不同的长度列表以及无限列表,并与-
一起使用lst
更改(require srfi/1) ; For R6RS you import (srfi :1)
(define (alt-sum lst)
(fold (lambda (op n result)
(op result n))
0
(circular-list + -)
lst))
(alt-sum '(1 3 5 7))
; ==> -4
和public class HomeViewModel
{
public Genre Genre { get; set; }
public Author Author { get; set; }
}
持续时间为Model.Genre
。
Tuple