遞歸

2013-04-26 110 views
0

我是新來dr racket,球拍博士總和想寫一個函數,如果遞歸

  1. 列表包含3個元素
  2. 如果子表的三個要素的總和,等於返回true假設該列表包含四個或更多元素,則列表的其餘部分的總和爲 列表。

沒有使用內置函數。

(define myfunction(lambda (sub subSum count restListSum myList) 
(cond 
    ((null? myList) (cond 
    ((= 0 subSum) #f) 
    ((= 0 count) #f) 
    ((= 3(count myList) #t) 
    ((= subSum restListSum) #t) 
    ((myfunction subSum(+ sub)) (car myList)) (+ count 1) (cdr myList)) #t) 
    ((myfunction sub subsum count(cdr myList)) #t) 
    ((myfunction car myList) subsume sub count (cdr myList)) #t) 
    ((and (not (= subSum 0)) (myfunction 1 (car myList) (+ count 1) (cdd myList))) #t) 
     (else #f)))) 
+2

什麼是你的問題? – 2013-04-26 01:50:31

回答

1

您的代碼沒有通過語法檢查。而不是試圖爲你解碼它,讓我給你提供一個'count'函數的簡單定義,它返回列表中的事物數量。這可能有助於您在重新嘗試自己的第一次嘗試時邁出一步。繼續嘗試!您可以爲自己定義兩個或三個輔助函數作爲起點。您還需要一個將單個參數(列表)作爲起點的函數。

(define (count theList) 
    (cond 
     ((null? theList) 0) 
     (else (+ 1 (count(cdr theList)))))) 
0

我試圖堅持你最初的想法和建議如下:

(define (myfunc lst) 

    (define (inner-function lst count sum1-3 sum4-x) 
    (if (empty? lst) 
     (cond 
      ((< count 3) 'error) 
      ((= count 3) #t) 
      (else (= sum1-3 sum4-x))) 
     (inner-function 
     (cdr lst) 
     (+ count 1) 
     (if (< count 3) 
      (+ sum1-3 (car lst)) 
      sum1-3) 
     (if (< count 3) 
      sum4-x 
      (+ sum4-x (car lst)))))) 

    (inner-function lst 0 0 0))