Function Scheme语法帮助:使用我在另一个程序中定义的函数

Function Scheme语法帮助:使用我在另一个程序中定义的函数,function,syntax,scheme,subset-sum,Function,Syntax,Scheme,Subset Sum,我创建了两个函数来帮助我解决问题。不过,我似乎有一个错误。它告诉我,我正在将两个参数传递给list sum。我已经玩了几个小时这个程序了。我想知道是否有人能发现这个问题 这是我的列表总和: (define list-sum (lambda(lst) (cond ((null? lst) 0) ((pair? (car lst)) (+(list-sum (car lst)) (list-sum (cdr lst)))) (else

我创建了两个函数来帮助我解决问题。不过,我似乎有一个错误。它告诉我,我正在将两个参数传递给
list sum
。我已经玩了几个小时这个程序了。我想知道是否有人能发现这个问题

这是我的
列表总和

(define list-sum 
  (lambda(lst)
    (cond
      ((null? lst) 0)
      ((pair? (car lst))
       (+(list-sum (car lst)) (list-sum (cdr lst))))
      (else
       (+ (car lst) (list-sum (cdr lst)))))))
(define ssum
  (lambda (n l)
    (cond
      ((null? l) #f)
      ((=(-(- n (car l))(list-sum l)) 0) l)
      ((ssum (cons (car l)) (cdr (cdr l))))
      (else (ssum n (cdr l))))))
这是我的函数,它使用
列表求和

(define list-sum 
  (lambda(lst)
    (cond
      ((null? lst) 0)
      ((pair? (car lst))
       (+(list-sum (car lst)) (list-sum (cdr lst))))
      (else
       (+ (car lst) (list-sum (cdr lst)))))))
(define ssum
  (lambda (n l)
    (cond
      ((null? l) #f)
      ((=(-(- n (car l))(list-sum l)) 0) l)
      ((ssum (cons (car l)) (cdr (cdr l))))
      (else (ssum n (cdr l))))))
它告诉我,我用一个参数调用了“复合过程#(数字)ssum”,它需要两个参数。我将它作为
(ssum 8(列表1 3 5 7))
传递

我的问题是:

  • 我的功能设置是否正确
  • 有更简单的求和方法吗 我的
    ssum
    中列表的编号
  • 我对这个计划也很陌生。如果你看到 一个明显的缩短代码的方法, 请随时纠正我

  • 列表和函数可以优化。首先,可以将两个
    (list sum(cdr lst))
    表达式连接起来,并且可以将三个
    (car lst)
    表达式减少为一个:

    (define (list-sum lst)
      (if (null? lst)
          0
          (+ (let ((l (car lst)))
               (if (pair? l)
                   (list-sum l)
                   l))
             (list-sum (cdr lst)))))
    

    列表和函数可以优化。首先,可以将两个
    (list sum(cdr lst))
    表达式连接起来,并且可以将三个
    (car lst)
    表达式减少为一个:

    (define (list-sum lst)
      (if (null? lst)
          0
          (+ (let ((l (car lst)))
               (if (pair? l)
                   (list-sum l)
                   l))
             (list-sum (cdr lst)))))
    

    我强烈建议您尝试一下,它的IDE有一个很棒的调试器,只有


    我没有深入研究代码应该如何工作,因为实际上
    ((ssum(cons(car l))(cdr(cdr l)))
    行中有几个错误:您只使用一个参数调用
    cons
    ,但在
    cond
    子句中也只有一种形式,它应该有一个测试和至少一个表达式。

    我强烈建议您尝试,它的IDE有一个很棒的调试器,只有


    我没有深入研究代码应该如何工作,因为实际上
    ((ssum(cons(car l))(cdr(cdr l)))
    行中有几个错误:您只使用一个参数调用
    cons
    ,但在
    cond
    子句中也只有一种形式,但是它后面应该有一个测试和至少一个表达式。

    您确实只使用一个参数调用它,即
    (cons(car l)(cdr(cdr l))
    。回答问题比编辑代码要好。我试图找出这个程序有什么问题,看到了你的评论。。。稍后。谢谢你们。这么简单的修复之后,我觉得有点傻。这种复发伤害了我的大脑(哈哈)。谢谢您的时间。您只需要一个参数即可调用它,即
    (cons(car l)(cdr(cdr l))
    。回答问题比编辑代码要好。我试图找出这个程序有什么问题,看到了你的评论。。。稍后。谢谢你们。这么简单的修复之后,我觉得有点傻。这种复发伤害了我的大脑(哈哈)。谢谢你的时间。这算不上优化,它既不会改变函数的速度也不会改变函数的空间使用。。。而且,每次你使用第一个字母变量时,上帝都会杀死一只小猫。这很难算作优化,它既不会改变函数的速度,也不会改变函数的空间使用。。。此外,每次你使用第一个字母变量时,上帝都会杀死一只小猫。