Dret博士总计与递归

时间:2013-04-26 01:43:34

标签: racket

我是dr racket的新手,正在尝试编写一个函数,如果

,则返回true
  1. list包含3个元素
  2. 如果三个元素的子列表的总和等于其余部分的总和 列表,假设列表包含四个或更多元素。
  3. 不使用内置功能。<​​/ p>

    (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 个答案:

答案 0 :(得分:1)

您的代码未通过语法检查。我没有尝试为你解码,而是让我为你提供这个简单的'count'函数定义,它返回列表中的东西数量。这可能有助于您在重新尝试自己的第一次尝试中向前迈出一步。继续尝试!您可以为自己定义两个或三个辅助函数作为起点。您还需要一个以单个参数(列表)为起点的函数。

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

答案 1 :(得分: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))