这应该是Scheme中的一个基本问题,但我看不出怎么做o_o
我有一个清单(e1 e2 e3)和一个功能m。 我想要的是,只使用map和/或apply,得到列表(m1 m2 m3),其中符号mN是(m eN)。
我的功能m不是一元(它将列表作为第一个arg,一个数字作为第二个arg,这个数字将应用于列表)并且我不知道如何传递第二个参数使用apply或map。
我该怎么做?
答案 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)