刚开始学习 sml,请原谅我可能造成的任何不适。
好的,这是我的功能:
fun swapPairsInList [(x,y)]
swapPairsInList: (’x * ’y) list --> (’y * ’x) list
我知道如何(递归地)交换列表中的对,但我遇到的问题是列表为空(null)时的基本情况。我如何检查这个列表是否为空?我试过
null [(x,y)]
但这只是抛出一个异常。我应该使用模式匹配来解决这个问题吗?
备查:
fun swapPairsInList [] = []
| swapPairsInList ((x,y)::tail) = (y,x) :: swapPairsInList tail
该模式[]
与空列表匹配。
当然,使用像 map 和 foldl 这样的高阶函数要好得多。
好的,所以我想通了,一旦我查看位于ListPair 结构中的 map 函数,我就从错误的角度解决了这个问题
新代码:
fun swap (x,y) = (y,x);
fun pairSwap l = map swap l;