0

我是新手dr racket,正在尝试编写一个返回 true 的函数

  1. 列表包含 3 个元素
  2. 如果子列表三个元素的总和等于列表其余部分的总和,假设列表包含四个或更多元素。

不使用内置函数。

(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))))
4

2 回答 2

1

您的代码没有通过语法检查。与其尝试为您解码,不如让我为您提供一个“计数”函数的简单定义,它返回列表中事物的数量。这可能会帮助您在重新设计自己的第一次尝试方面向前迈出一步。继续尝试!您可以为自己定义两个或三个辅助函数作为起点。您还需要一个以单个参数(列表)为起点的函数。

(define (count theList)  
    (cond
      ((null? theList) 0)
      (else (+ 1 (count(cdr theList))))))
于 2013-04-26T02:58:35.723 回答
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))
于 2013-04-26T20:44:17.477 回答