Scheme:对元组列表使用apply
如何使用apply in Scheme将每个元组的第一个元素乘以一个数字 例如,如果我的列表x=Scheme:对元组列表使用apply,scheme,apply,Scheme,Apply,如何使用apply in Scheme将每个元组的第一个元素乘以一个数字 例如,如果我的列表x=((12)(34)) 我想做一些类似的事情:(apply*2(car x)),这样它就会返回 ((2 2)(6 4))我认为您并不完全理解方案的所有要素是如何结合在一起的 首先,术语“tuple”有点模棱两可。Scheme没有任何正式的元组类型,它有对和列表。列表本身是由对构建的,尽管这通常是处理高阶函数时的一个实现细节。您的列表是两个元素的列表还是成对的列表 其次,apply不是您想要的。apply
((12)(34))
我想做一些类似的事情:(apply*2(car x))
,这样它就会返回
((2 2)(6 4))
我认为您并不完全理解方案的所有要素是如何结合在一起的
首先,术语“tuple”有点模棱两可。Scheme没有任何正式的元组类型,它有对和列表。列表本身是由对构建的,尽管这通常是处理高阶函数时的一个实现细节。您的列表是两个元素的列表还是成对的列表
其次,apply
不是您想要的。apply
函数接受一个函数和一组参数,然后使用提供的列表作为其参数调用该函数。相反,您需要的是map
,它接受一个列表和一个应用于列表中每个元素的transformer函数,并返回通过将该函数应用于所提供列表中的所有元素而创建的列表
最简单的方法是使用一个简单的lambda表达式。这对列表和对都有效,因为在每种情况下访问第一个元素是相同的
(map (lambda (x)
(cons (* 2 (car x)) (cdr x)))
'((1 2) (3 4)))
这将使用列表中的每个元素调用提供的匿名函数,该函数返回一个新的对,第一个单元格是其输入值的两倍,第二个单元格保持不变。对于Scheme的所有这些元素如何组合在一起,我想您还不完全了解 首先,术语“tuple”有点模棱两可。Scheme没有任何正式的元组类型,它有对和列表。列表本身是由对构建的,尽管这通常是处理高阶函数时的一个实现细节。您的列表是两个元素的列表还是成对的列表 其次,
apply
不是您想要的。apply
函数接受一个函数和一组参数,然后使用提供的列表作为其参数调用该函数。相反,您需要的是map
,它接受一个列表和一个应用于列表中每个元素的transformer函数,并返回通过将该函数应用于所提供列表中的所有元素而创建的列表
最简单的方法是使用一个简单的lambda表达式。这对列表和对都有效,因为在每种情况下访问第一个元素是相同的
(map (lambda (x)
(cons (* 2 (car x)) (cdr x)))
'((1 2) (3 4)))
这将使用列表中的每个元素调用提供的匿名函数,该函数返回一个新的对,第一个单元格是其输入值的两倍,第二个单元格保持不变。对于Scheme的所有这些元素如何组合在一起,我想您还不完全了解 首先,术语“tuple”有点模棱两可。Scheme没有任何正式的元组类型,它有对和列表。列表本身是由对构建的,尽管这通常是处理高阶函数时的一个实现细节。您的列表是两个元素的列表还是成对的列表 其次,
apply
不是您想要的。apply
函数接受一个函数和一组参数,然后使用提供的列表作为其参数调用该函数。相反,您需要的是map
,它接受一个列表和一个应用于列表中每个元素的transformer函数,并返回通过将该函数应用于所提供列表中的所有元素而创建的列表
最简单的方法是使用一个简单的lambda表达式。这对列表和对都有效,因为在每种情况下访问第一个元素是相同的
(map (lambda (x)
(cons (* 2 (car x)) (cdr x)))
'((1 2) (3 4)))
这将使用列表中的每个元素调用提供的匿名函数,该函数返回一个新的对,第一个单元格是其输入值的两倍,第二个单元格保持不变。对于Scheme的所有这些元素如何组合在一起,我想您还不完全了解 首先,术语“tuple”有点模棱两可。Scheme没有任何正式的元组类型,它有对和列表。列表本身是由对构建的,尽管这通常是处理高阶函数时的一个实现细节。您的列表是两个元素的列表还是成对的列表 其次,
apply
不是您想要的。apply
函数接受一个函数和一组参数,然后使用提供的列表作为其参数调用该函数。相反,您需要的是map
,它接受一个列表和一个应用于列表中每个元素的transformer函数,并返回通过将该函数应用于所提供列表中的所有元素而创建的列表
最简单的方法是使用一个简单的lambda表达式。这对列表和对都有效,因为在每种情况下访问第一个元素是相同的
(map (lambda (x)
(cons (* 2 (car x)) (cdr x)))
'((1 2) (3 4)))
这将使用列表的每个元素调用提供的匿名函数,该函数返回一个新的对,第一个单元格是其输入值的两倍,第二个单元格保持不变。您可能希望使用
map
,而不是apply
。您可能希望使用map
,不apply
。您可能想使用map
,而不是apply
。您可能想使用map
,而不是apply
。好的,谢谢。我对Scheme很陌生,所以感谢您澄清这些术语的正确用法!好的,谢谢。我对Scheme很陌生,所以感谢您澄清这些术语的正确用法!好的,谢谢。我对Scheme很陌生,所以感谢您澄清这些术语的正确用法!好的,谢谢。我对Scheme很陌生,所以感谢您澄清这些术语的正确用法!