[英]Racket complex reduce function
我試圖以比通常預期的方式更復雜的方式使用reduce函數。 我什至不確定這是否可行,但這是我想要做的:
給定一個列表(1 2 3)
和兩個常量,讓它們分別為9
和13
,我試圖使用reduce結束:
(+ 1 (* 9 (+ 2 (* 9 (+ 3 (* 9 13))))))
我嘗試了將13加到then列表后面的方法,所以我不得不(1 2 3 13)
然后嘗試使用Lambda進行映射並歸約,但我無法獲得正確的答案。
我會發布我嘗試過的代碼,但我的互聯網已斷開,我正在手機上鍵入此代碼,所以很抱歉,我無法顯示我嘗試執行的操作,但目標是上面使用reduce的表達式形式
所提出的操作確實可以作為實施reduce
(又名foldr
):
(+ 1 (* 9 (+ 2 (* 9 (+ 3 (* 9 13))))))
=> 9739
(reduce (lambda (e acc) (+ e (* 9 acc)))
13
'(1 2 3))
=> 9739
關於常量, 13
在最里面的表達式中僅使用一次,因此很適合用作初始值。 9
用於累加累加值。 當遞歸開始展開時,輸入列表從右到左使用,這時我們將當前元素添加到累加結果中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.