List 拉克特·兰博达

List 拉克特·兰博达,list,racket,List,Racket,我试着用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博士的“lambda”做我的第一步。(高级语言)

在我尝试以下代码之前,一切都很好:

(map (lambda (list1 list2)
     [map list (foldr + 0 (map * list1 list2 ) ) ]    )
   (list 1 2 3 4 5)
   (list 6 7 8 9 10) 
)
我试着根据球拍的动作尽可能地调整我的代码。 但我不明白这里出了什么问题。

它应该输出一个由两个具有相同索引的输入列表元素组成的列表。 控制台输出显示:

map: 2nd argument must be a list, given 1
而1始终是列表1的第一个元素


潜意识说我只是在任何地方弄乱了()。

你似乎误解了
图中
lambda
的参数是什么意思。
lambda
的参数不是列表,而是列表的元素

在正常的单参数映射中,它不是:

(map (lambda (list1)
       ....)
     (list 1 2 3 4 5))
但实际上:

(map (lambda (elem1)  ; elem1 is an element of the list
       ....)
     (list 1 2 3 4 5))
两个参数映射也是一样的。lambda的参数是其各自列表的元素:

(map (lambda (elem1 elem2)  ; elem1 is an element of the first list, elem2 is an element of the second list
       ....)
     (list 1 2 3 4 5)
     (list 6 7 8 9 10))
在您的示例中,这两个列表是
[Listof Number]
,因此
lambda
的参数是
Number

(map (lambda (elem1 elem2) ; elem1 : Number, elem2 : Number
       ; here you have two numbers, so you can multiply them,
       ; but `map`-ing over the numbers doesn't make sense
       (* elem1 elem2))
     (list 1 2 3 4 5)   ; [Listof Number]
     (list 6 7 8 9 10)) ; [Listof Number]

好的,我明白了。有什么方法可以在lambda内部获取列表,或者我需要为此定义一个函数吗?@Aki如果您不需要
映射
,则不需要外部
lambda
。您可以直接使用列表,也可以创建一个过程,将两个列表串联起来,并将其与代码中的
list
表达式一起传递,以获得所需的内容。