我在做99点的问题在Haskell当我遇到了一个解决方案,以问题19,我没有完全理解.
任务是编写一个像这样工作的旋转函数
*Main> rotate ['a','b','c','d','e','f','g','h'] 3
"defghabc"
*Main> rotate ['a','b','c','d','e','f','g','h'] (-2)
"ghabcdef"
Run Code Online (Sandbox Code Playgroud)
提供的解决方案是
rotate [] _ = []
rotate l 0 = l
rotate (x:xs) (n+1) = rotate (xs ++ [x]) n
rotate l n = rotate l (length l + n)
Run Code Online (Sandbox Code Playgroud)
我不明白模式匹配如何达到第四行.它似乎与这个有关,(n+1)所以当n为负时,第三行不匹配,因此第四行被采用.如果是这种情况,为什么符号会以(n+1)这种方式起作用.是不是那么武断,或者是一个我不知道的惯例(数学?)?
因为我理解它的方式是在第三行递归调用rotate,参数n减1.所以我会这么认为
rotate [] _ = []
rotate l 0 = l
rotate (x:xs) n = rotate (xs ++ [x]) (n-1)
rotate l n …Run Code Online (Sandbox Code Playgroud)