使用不同大小的参数上的map的方案

时间:2017-02-02 07:49:05

标签: functional-programming scheme

我如何在计划中完成这样的事情? 输入的示例是

(scalar-mult '(1 2) 2)

输出

'(2 4)

这是我到目前为止所尝试的内容:

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

我见过一个不同的类似线程推荐concat和repeat,但这似乎不适用于方案

2 个答案:

答案 0 :(得分:0)

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

试试这个:

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

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

答案 1 :(得分:0)

您正在尝试迭代2的列表元素,这很荒谬。如果您希望2可用作变量,请不要提及它并将其传递给它:

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

在列表大小不同时回答问题:

Scheme标准中的

map要求列表参数的大小完全相同,但是你有SRFI-1,就像列表中的所有元素都与最短列表一样。< / p>

#!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)