(e1 e2 e3) to (m1 m2 m3) using only map and/or apply (Scheme)
这应该是Scheme中的一个基本问题,但是我看不到该怎么做o_o
我有一个列表(e1 e2 e3)和一个函数m。
我想要的是仅使用map和/或apply获得列表(m1 m2 m3),其中符号mN为(m eN)。
我的函数m不是一元的(它将列表作为第一个arg,将数字作为第二个arg,此数字将应用于列表),而且我不知道如何使用apply或map传递第二个参数。
我该怎么做?
为具体起见,我们假设m是取整数的函数,所以
1 | (define (m n) (- n)) |
例如,
1 | (map m '(1 -2 3)) |
,它将评估为列表
编辑:在评论中,原始张贴者说他的函数m是二进制的,而不是一元的。我有些困惑,但是让我再试一次,看看是否可行。
让我们假设期望的函数将整数列表作为第一个参数,将整数作为第二个参数,并返回一个新列表,其中第一个列表的每个元素都增加第二个参数的数量;因此,该函数可能会使用列表
1 2 3 | (define (f xs n) (map (lambda (x) (+ x n)) xs)) |
您可以在http://ideone.com/KmcSef。
上看到它。
我希望这能回答您的问题。如果没有,请给出一个更具体的示例,包括您要执行的操作的特定输入和输出。
您的问题不是很清楚,但是似乎函数的第二个参数在应用程序上下文中必须是恒定的:
1 2 3 | (define lst '(1 2 3)) (define elst '(2 0 1)) (map (lambda (x) (list-ref lst x)) elst) |