multiplying each element of a list with each element of another list in lisp -


i want write function accepts 2 lists argument , return multiplication of them in list. this:

(3 4) (3 5 6) => (9 15 18 12 20 24)

this code i've came receive error telling me have few arguments map.

(defun multip (lst lst2)     ;this function flatten result    (defun flatten (tree)      (let ((result '()))        (labels ((scan (item)            (if (listp item)                (map nil #'scan item)                (push item result))))                   (scan tree))                        (nreverse result))) (flatten (map (lambda (i) (map (lambda (j) (* j)) lst )) lst2))  )     (write  (multip '(3 4 6) '(3 2) )) 

i can not understand doing wrong. appreciate comment.

you should use mapcar instead of map:

(mapcar (lambda (i) (mapcar (lambda (j) (* j)) lst )) lst2)) 

these 2 different functions: mapcar maps function on 1 or more lists, , requires @ least 2 arguments, while map equivalent kind of sequences (e.g. vectors), , requires additional argument specifying type of result. see reference map here, , reference mapcar here.

style

you using defun inside defun: not style, since every time multip called redefines globally function flatten. should either define flatten externally, once, or use local declaration of function flet or labels (as internal function scan inside flatten.)

for alternative , more simple definitions of flatten, can see this question in so.


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -