簡體   English   中英

甚至在計划中的總和

[英]Sum of even in Scheme

這是我第一次使用Scheme。 我有一個整數列表,我想得到列表中所有偶數的總和。

 ; sum_even
(define (sum_even l)
  (if (null? l) l
  (cond ((even? (car l)) 0)
        ((not(even? (car l))) (car l)))
  (+ (sum_even (car l) (sum_even(cdr l))))))
(sum_even '(2 3 4))
(define (sum_even l)
    (cond ((null? l) 0)
          ((even? (car l)) (+ (car l) (sum_even (cdr l))))
          (else (sum_even (cdr l)))))

沒有測試過

你並不是在問一個問題。 您在檢查您的解決方案是否正確或正在尋找替代解決方案嗎?

您也可以通過以下方式實現它

(apply + (filter even? lst))

編輯:如果,正如您所提到的,您不能使用過濾器,此解決方案將起作用並且是尾遞歸的:

(define (sum-even lst)
    (let loop ((only-evens lst) (sum 0))
        (cond
            ((null? only-evens) sum)             
            ((even? (car only-evens))
             (loop (cdr only-evens) (+ (car only-evens) sum)))
            (else (loop (cdr only-evens) sum)))))
(define (sum-even xs)
  (foldl (lambda (e acc) 
           (if (even? e) 
               (+ e acc) 
               acc))
         0 
         xs))

例:

> (sum-even (list 1 2 3 4 5 6 6))
18

這是另一個具有更高階函數且沒有顯式遞歸的函數:

(use srfi-1)

(define (sum-even ls) (fold + 0 (filter even? ls)))

考慮使用內置過濾器功能。 例如:

(filter even? l)

將返回列表中的偶數列表l。 有很多方法可以對列表中的數字求和(示例來自http://groups.engin.umd.umich.edu/CIS/course.des/cis400/scheme/listsum.htm ):

;
; List Sum
; By Jerry Smith
;
(define (list-sum lst)
   (cond
     ((null? lst)
       0)
     ((pair? (car lst))
      (+(list-sum (car lst)) (list-sum (cdr lst))))
     (else
       (+ (car lst) (list-sum (cdr lst))))))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM