【问题标题】:SML: What would be the best way to go through a list to take every other value?SML:通过列表获取其他所有值的最佳方法是什么?
【发布时间】:2018-08-11 23:24:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: list sml ml mosml


    【解决方案1】:

    在这种情况下,您也可以使用模式匹配“解构”列表 - 模式可以任意复杂。
    例如,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 的情况作为练习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多