相关疑难解决方法(0)

模式匹配中的Haskell(n + 1)

我在做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)

haskell pattern-matching

20
推荐指数
1
解决办法
3987
查看次数

标签 统计

haskell ×1

pattern-matching ×1