Scheme 取数字的子集,检查它们的总和是否等于方案中的目标和?

Scheme 取数字的子集,检查它们的总和是否等于方案中的目标和?,scheme,lisp,subset,racket,subset-sum,Scheme,Lisp,Subset,Racket,Subset Sum,我想写一个名为sumToN的函数,它以一个数字列表L和一个目标数字T作为输入,并返回L中的每个数字子集,这些数字的总和正好等于T。这些子集必须按特定顺序返回,如下面的示例所示 e、 g输入萨姆顿6'1 2 3 4 5 e、 g输出2 4 1 5 1 2 3 到目前为止,我有这个 (define sumToN (lambda (T L) (cond [(null? L) '() ] [(null? (cdr L))

我想写一个名为sumToN的函数,它以一个数字列表L和一个目标数字T作为输入,并返回L中的每个数字子集,这些数字的总和正好等于T。这些子集必须按特定顺序返回,如下面的示例所示

e、 g输入萨姆顿6'1 2 3 4 5

e、 g输出2 4 1 5 1 2 3

到目前为止,我有这个

(define sumToN
  (lambda (T L)
    (cond
      [(null? L)                '() ]
      [(null? (cdr L))                (checkEqual T (list(car L))) ]
      [#t (checkEqual T (+(cadr L)(car L)))]
     )
   )
 )

;; creating helper function called checkEqual
(define checkEqual
  (lambda (T L)
    (cond
      [(equal? T (car L))                (L) ]
      [#t '()]
     )
   )
 )

Racket使这变得微不足道:

定义萨姆顿TL 序列->列表 序列过滤器λ组合=应用+组合t 组合 萨姆顿6'1 2 3 4 5;=>1 2 3 2 4 1 5 获得所需的顺序是留给读者的一个练习,特别是因为你没有说什么是顺序规则