我如何在计划中完成这样的事情? 输入的示例是
(scalar-mult '(1 2) 2)
输出
'(2 4)
这是我到目前为止所尝试的内容:
(define (scalar-mult vec s)
(map (λ (vec s) (* s vec)) vec s))
我见过一个不同的类似线程推荐concat和repeat,但这似乎不适用于方案
答案 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)