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
只能有一个值,但值本身可以是一个包含多个值的列表