List 拉克特·兰博达
我试着用Racket博士的“lambda”做我的第一步。(高级语言) 在我尝试以下代码之前,一切都很好: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) ) 我试着根据球拍的动作尽可能地调整我的代码。 但我不明白这里出了什么问题。 它应该输出一个由两个具有相同索引的输入列表元素组成的列表。 控
(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
表达式一起传递,以获得所需的内容。