我尝试在Dr Racket(高级语言)中使用"lambda"进行编程。
一切都很顺利,直到我尝试运行以下代码:
(map (lambda (list1 list2)
[map list (foldr + 0 (map * list1 list2 ) ) ] )
(list 1 2 3 4 5)
(list 6 7 8 9 10)
)
我尽力根据 Racket 文档来改进我的代码,但是我不明白这里出了什么问题。http://docs.racket-lang.org/reference/pairs.html#(def._((lib._racket/private/map..rkt)._map)) 这个程序应该会输出一个由两个输入列表对应元素乘积组成的列表。但控制台输出如下:
map: 2nd argument must be a list, given 1
其中1始终是list1的第一个元素。
潜意识告诉我,我随意地改变了( )的位置。
map
,那么外部的lambda
也就没有必要了。你可以直接使用列表,或者编写一个接受两个列表的过程,并将其与代码中的list
表达式一起传递,以获得你想要的结果。 - Sylwester