2

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

好的,这是我的功能:

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

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

null [(x,y)]

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

4

2 回答 2

3

备查:

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

该模式[]与空列表匹配。

当然,使用像 map 和 foldl 这样的高阶函数要好得多。

于 2013-04-11T12:06:24.853 回答
1

好的,所以我想通了,一旦我查看位于ListPair 结构中的 map 函数,我就从错误的角度解决了这个问题

新代码:

fun swap (x,y) = (y,x);
fun pairSwap l = map swap l;
于 2013-04-07T20:04:00.857 回答