Functional programming 对不同大小的参数使用映射的方案

Functional programming 对不同大小的参数使用映射的方案,functional-programming,scheme,Functional Programming,Scheme,我如何在scheme中完成类似的任务? 一个示例输入是 (scalar-mult '(1 2) 2) 与输出 '(2 4) 以下是我迄今为止所尝试的: (define (scalar-mult vec s) (map (λ (vec s) (* s vec)) vec s)) 我看到过另一个类似的线程建议concat和repeat,但这似乎不适用于schemel是列表,m是乘数,e是列表的一个元素 试试这个: (define scalar-mult (lambda (l m)

我如何在scheme中完成类似的任务? 一个示例输入是

(scalar-mult '(1 2) 2)
与输出

'(2 4)
以下是我迄今为止所尝试的:

(define (scalar-mult vec s)
  (map (λ (vec s) (* s vec)) vec s))

我看到过另一个类似的线程建议concat和repeat,但这似乎不适用于scheme

l
是列表,
m
是乘数,
e
是列表的一个元素

试试这个:

(define scalar-mult
  (lambda (l m)
    (map (lambda (e)
           (* e m))
         l)))

函数
map
接受两个参数。首先是一个应用于列表中每个元素的函数,然后是一个列表。

您尝试的是迭代
2
的列表元素,这很荒谬。如果希望
2
作为变量可用,请不要提及它,并按如下方式传递它:

(define (scalar-mult vec s)
  (map (λ (vec) (* s vec)) vec))
要回答列表大小不同时的问题,请执行以下操作:

Scheme标准中的
map
要求列表参数的大小完全相同,但是您有一个类似于所有列表的元素数与最短列表的元素数相同的方法

#!r6rs

(import (except (rnrs base) map for-each)
        (srfi :1))

(map (lambda (n1 n2) (+ n1 n2)) 
     (circular-list 1 2) ; infinite list with 1, 2 repeating
     '(2 3 4 5))
; ==> (3 5 5 7)