Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Map 方案中列表中值的平方和_Map_Lisp_Scheme - Fatal编程技术网

Map 方案中列表中值的平方和

Map 方案中列表中值的平方和,map,lisp,scheme,Map,Lisp,Scheme,我试图让下面的程序工作,但出于某种原因,它一直告诉我,我的输入没有包含正确数量的参数,为什么?这是节目单 (define (sum f lst) (cond ((null? lst) 0) ((pair? (car lst)) (+(f(sum (f car lst))) (f(sum (f cdr lst))))) (else (+ (f(car lst)) (f(sum (f cdr lst))))))) 这是我的

我试图让下面的程序工作,但出于某种原因,它一直告诉我,我的输入没有包含正确数量的参数,为什么?这是节目单

(define (sum f lst)
   (cond
     ((null? lst)
       0)
     ((pair? (car lst))
      (+(f(sum (f car lst))) (f(sum (f cdr lst)))))
     (else
       (+ (f(car lst)) (f(sum (f cdr lst)))))))
这是我的输入:
(总和(λ(x)(*x))”(1233))

谢谢


顺便说一句,我不相信代码,我只是玩得很开心(http://groups.engin.umd.umich.edu/CIS/course.des/cis400/scheme/listsum.htm)您确实向过程
sum
f
传递了错误数量的参数,请注意表达式
(sum(f car lst))
(sum(f cdr lst))
是错误的,您的意思肯定是
(sum f(car lst))
(sum f(cdr lst))
-您不想对正在传递的两个参数应用
f
(单参数过程),
sum
需要两个参数,但只传递一个。请尝试以下方法:

(define (sum f lst)
  (cond ((null? lst)
         0)
        ((pair? (car lst))
         (+ (sum f (car lst)) (sum f (cdr lst))))
        (else
         (+ (f (car lst)) (sum f (cdr lst))))))
更重要的是:您在错误的位置调用了
f
过程。最后一行只需要一个调用,如果
(car lst)
只是一个数字而不是一个列表,那么在其他地方,
(car lst)
(cdr lst)
都是需要遍历的列表;只需将
f
作为参数传递,以正确推进递归

让我们用一个更有趣的输入来尝试更正后的过程-实际上,该过程能够找到任意嵌套列表列表的总和:

(sum (lambda (x) (* x x)) '(1 (2) (3 (4)) 5))
> 55

你应该看一看或者,这两本书都会教你如何在列表列表上构造这种递归问题的解决方案。

你确实把错误数量的参数传递给了过程
sum
f
,注意表达式
(sum(f car lst))
(sum(f cdr lst))
是错误的,您的意思肯定是
(sum f(car lst))
(sum f(cdr lst))
-您不想对正在传递的两个参数应用
f
(单参数过程),
sum
需要两个参数,但只传递一个。请尝试以下方法:

(define (sum f lst)
  (cond ((null? lst)
         0)
        ((pair? (car lst))
         (+ (sum f (car lst)) (sum f (cdr lst))))
        (else
         (+ (f (car lst)) (sum f (cdr lst))))))
更重要的是:您在错误的位置调用了
f
过程。最后一行只需要一个调用,如果
(car lst)
只是一个数字而不是一个列表,那么在其他地方,
(car lst)
(cdr lst)
都是需要遍历的列表;只需将
f
作为参数传递,以正确推进递归

让我们用一个更有趣的输入来尝试更正后的过程-实际上,该过程能够找到任意嵌套列表列表的总和:

(sum (lambda (x) (* x x)) '(1 (2) (3 (4)) 5))
> 55

你应该看一看或者,这两本书都会教你如何在列表列表上构造这种递归问题的解决方案。

提示:无论你在哪里调用
sum
你都在向它传递两个参数吗?oops上传了一个过时的程序版本,我现在已经修复了它,但错误仍然存在,这可能不是正确的方法吗?HINT2:现在您正在使用无效数量的参数调用f。我猜你是迷路了:)这样做的目的不是让别人替你数帕伦斯。特别是如果这是一个类项目。不,只是我在尝试学习一种不同语法的语言,很抱歉,我只希望得到提示提示提示:你在哪里调用
sum
你是否向它传递了两个参数?oops上传了一个过时的程序版本,我现在已经修复了它,但错误仍然存在,这可能不是正确的方法吗?HINT2:现在您正在使用无效数量的参数调用f。我猜你是迷路了:)这样做的目的不是让别人替你数帕伦斯。特别是如果这是一个类项目。不,只是我试图学习一种不同语法的语言,对不起,我不期待任何东西,除了hints谢谢!我现在可以看出我的错误是多么愚蠢,scheme语法是我还没有习惯的:)另一件事,条件之一是配对?对于car lst,car是否也可以不止一个值?根据定义,它是列表中的第一个值。
对?
条件用于确定
(car lst)
是数字还是元素
Car
只能有一个值,但值本身可以是一个包含多个值的列表谢谢!我现在可以看出我的错误是多么愚蠢,scheme语法是我还没有习惯的:)另一件事,条件之一是配对?对于car lst,car是否也可以不止一个值?根据定义,它是列表中的第一个值。
对?
条件用于确定
(car lst)
是数字还是元素
Car
只能有一个值,但值本身可以是一个包含多个值的列表