【问题标题】:how to check if list is empty如何检查列表是否为空
【发布时间】:2013-04-07 16:44:58
【问题描述】:

刚开始学习 sml,请原谅我可能造成的任何不适。

好的,这是我的功能:

fun swapPairsInList [(x,y)]
swapPairsInList: (’x * ’y) list --> (’y * ’x) list

我知道如何(递归地)交换列表中的对,但我遇到的问题是列表为空(null)时的基本情况。我如何检查这个列表是否为空?我试过了

null [(x,y)]

但这只是抛出一个异常。我应该使用模式匹配来解决这个问题吗?

【问题讨论】:

  • 你能解释一下你是如何使用null的吗?有什么例外?只要xy 在范围内,表达式null [(x,y)] 就不会导致任何类型的错误。但是它也永远不会返回 true,因为列表 [(x,y)] 显然不是空的。
  • Hm.. 那我的函数参数是不是表述不正确?我想要做的是将元组列表传递给 swapPairsInList 并交换元组对。例如:调用swapPairsInList [(1,2), (3,4), (5,6)]; 将返回[(2,1),(4,3),(6,5)]
  • 是的,如果你的代码看起来像fun swapPairsInList [(x,y)] = something,那么你的代码是错误的,因为它只适用于只包含一个元素的列表。有关更多信息,我需要查看您的代码。
  • 啊,好吧!我现在明白了,谢谢你的帮助

标签: sml smlnj


【解决方案1】:

供将来参考:

fun swapPairsInList []            = []
  | swapPairsInList ((x,y)::tail) = (y,x) :: swapPairsInList tail

模式[] 匹配空列表。

当然,使用 map 和 foldl 等高阶函数要好得多。

【讨论】:

    【解决方案2】:

    好吧,我想通了,当我查看位于 ListPair structure 中的地图函数时,我从错误的角度解决了这个问题

    新代码:

    fun swap (x,y) = (y,x);
    fun pairSwap l = map swap l;
    

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2011-12-19
      • 2017-02-20
      • 1970-01-01
      相关资源
      最近更新 更多