list - SML:遍历列表以获取所有其他值的最佳方法是什么?

标签 list sml ml mosml

我最近在 sml 方面做了很多练习,我在教科书上发现的一个问题是要求创建一个函数,该函数将函数应用于列表中的奇数索引值。当试图解决这个问题时,我真的不明白如何获得其他所有值(value)。例如

fun something f [] = 0
    | something f (x:xs) = 

在上面我知道我们可以通过 x 值按顺序获取值,但是现在有没有办法应用它来只获取奇数索引值?对不起,如果这是一个简单的问题,sml 是一种有趣但令人困惑的语言。

最佳答案

在那种情况下,您也可以使用模式匹配“解构”列表——模式可以任意复杂。
例如,a::b::bs 匹配至少包含两个元素的列表,a::b::c::bs 至少包含三个,等等.

如果我们索引第一个元素 1:

fun everyOther _ [] = []
  | everyOther f [x] = [f x]
  | everyOther f (x::y::xs) = (f x)::y::(everyOther f xs)

测试:

val everyOther = fn : ('a -> 'a) -> 'a list -> 'a list
val it = () : unit
- fun square x = x * x;
val square = fn : int -> int
- everyOther square [1,2,3,4];
val it = [1,2,9,4] : int list
- everyOther square [1,2,3,4,5];
val it = [1,2,9,4,25] : int list

第一个元素被索引为 0 而不是 1 的情况留作练习。

关于list - SML:遍历列表以获取所有其他值的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091262/

相关文章:

python - 在 Python 中返回多个列表

C# - 使用数据库中的数据填充列表

sml - 解决 SML/NJ 编译管理器中的库冲突

module - OCaml 在实现中重复整个签名

functional-programming - 我可以在 Google 的 Native Client 中使用 Gambit-C、Mlton 或 Chicken Scheme 吗

functional-programming - 您建议学习哪种英语教程?

python - Google Foobar 挑战 Power Hungry - 未通过测试。 5 个测试用例中的 3 个 [隐藏]?

python - 在python中访问字典列表中的元素

c++ - 如何提高 PolyML 中的数组基准性能?

types - 解决标准 ML 中输入歧义的上下文