【问题标题】:SML: Use high-order function foldr to reverse a listSML:使用高阶函数 foldr 反转列表
【发布时间】:2014-04-06 05:41:05
【问题描述】:

我尝试使用 foldr 来反转如下列表

fun rev(l) = foldr (a b => b ++ [a]) [] l;

但我收到错误:stdIn:4.25 错误:在 DARROW 发现语法错误

谁能帮忙指出错误?代码正确吗?

谢谢。

【问题讨论】:

    标签: list reverse fold


    【解决方案1】:
    1. 抛出 DARROW 错误是因为 lambda 表达式应该以 fn 开头。
    2. Foldr 得到一个元组,所以 lambda 表达式应该以 fn (a,b) 开头
    3. ++ 是 Haskell 中的 concat 运算符。在 SML 中是 @

    总结如下:

    fun rev(l) = foldr (fn (a,b) => b @ [a]) [] l;
    

    这确实颠倒了一个列表!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2013-01-16
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多