(e1 e2 e3)至(m1 m2 m3)仅使用地图和/或应用(方案)

(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))

例如,(m 3)的值为-3。然后可以将m应用于列表(1 -2 3)的每个元素,如下所示:

1
(map m '(1 -2 3))

,它将评估为列表(-1 2 -3)。您可以在http://ideone.com/Le7PHC上看到此操作。

编辑:在评论中,原始张贴者说他的函数m是二进制的,而不是一元的。我有些困惑,但是让我再试一次,看看是否可行。

让我们假设期望的函数将整数列表作为第一个参数,将整数作为第二个参数,并返回一个新列表,其中第一个列表的每个元素都增加第二个参数的数量;因此,该函数可能会使用列表(1 3 5)和整数7并返回列表(8 10 12)。此功能可以做到:

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)