[英]Using Racket ISL to define functions using list abstractions and local/lambda
我正在嘗試設計一個函數,給定一個數字列表,返回提供的列表中偶數的平方。 我不想計算最終結果中不會使用的平方。
這就是我使用地圖和過濾器的內容:
; even-squares-only : [List-of Number] -> [List-of Number]
; returns square of only even numbers in a supplied list
(define (even-squares-only lon)
(map (λ (n) (sqr n)) (filter even? lon)))
我將如何使用 foldr 函數設計相同的函數,以便我可以迭代列表的元素一次而不是兩次(我也嘗試在此函數中使用 local 或 lambda)?
在帶有 lambda 的 ISL 中:
(define (even-squares-only lon)
(foldr (lambda (element result)
(if (even? element)
(cons (sqr element) result)
result))
'()
lon))
如果您將匿名函數重寫為命名函數,則此練習甚至可以在沒有local
和lambda
的情況下完成:
(define (reducing-fn element result)
(if (even? element)
(cons (sqr element) result)
result))
(define (even-squares-only lon)
(foldr reducing-fn
'()
lon))
例子:
> (even-squares-only '(1 2 3 4 5 6 7 8 9 10))
(list 4 16 36 64 100)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.