简体   繁体   中英

Racket two lists lambda

I tried to do my first steps with "lambda" in Dr Racket. (Advanced language)

Everything was fine until I tried out the following piece of code:

(map (lambda (list1 list2)
     [map list (foldr + 0 (map * list1 list2 ) ) ]    )
   (list 1 2 3 4 5)
   (list 6 7 8 9 10) 
)

I tried to adapt my code according to the Racket dokumentation as good as possible. But I just don't get what's wrong here. http://docs.racket-lang.org/reference/pairs.html#(def._((lib._racket/private/map..rkt)._map))

It should output a single list consisting of the droduct of the 2 input list elements with the same index. Console output says:

map: 2nd argument must be a list, given 1

whereas 1 is always the first element of list1

Subconsciousness says I just messed with ( ) anywhere.

You seem to be misunderstanding what the arguments to the lambda mean in a map . The arguments to the lambda are not the lists, they are elements of the lists.

In a normal one-argument map it's not:

(map (lambda (list1)
       ....)
     (list 1 2 3 4 5))

But actually:

(map (lambda (elem1)  ; elem1 is an element of the list
       ....)
     (list 1 2 3 4 5))

It's the same with two-argument map. The arguments to the lambda are elements of their respective lists:

(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))

In your example, the two lists are [Listof Number] , so the arguments to the lambda are 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]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM