(e1 e2 e3)至(m1 m2 m3)仅使用地图和/或申请(Scheme)

时间:2016-05-14 16:10:21

标签: scheme

这应该是Scheme中的一个基本问题,但我看不出怎么做o_o

我有一个清单(e1 e2 e3)和一个功能m。 我想要的是,只使用map和/或apply,得到列表(m1 m2 m3),其中符号mN是(m eN)。

我的功能m不是一元(它将列表作为第一个arg,一个数字作为第二个arg,这个数字将应用于列表)并且我不知道如何传递第二个参数使用apply或map。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

为了使这个具体,让我们假设 m 是否定整数的函数,所以

(define (m n) (- n))

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

(map m '(1 -2 3))

将评估列表(-1 2 -3)。您可以在http://ideone.com/Le7PHC处看到这一点。

编辑:在评论中,原始海报说他的函数 m 是二元的,而不是一元的。我有点困惑,但让我再试一次,看看是否有效。

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

(define (f xs n)
  (map (lambda (x) (+ x n))
       xs))

您可以在http://ideone.com/KmcSef看到。

我希望这能回答你的问题。如果没有,请提供一个更具体的例子,包括你想要做的具体输入和输出。

答案 1 :(得分:1)

您的问题不是很清楚,但似乎您的函数的第二个参数在应用程序的上下文中必须是常量:

(define lst '(1 2 3))
(define elst '(2 0 1))
(map (lambda (x) (list-ref lst x)) elst)