我具有以下函数来获取矩阵的幂
X ^ 0 =单位矩阵
X ^ 1 = X;
X ^ 2 = X'X;
X ^ 3 = X X'X;
X ^ 4 = X'X X'X ......
我尝试了以下功能:
import Numeric.Container
import Numeric.LinearAlgebra
mpow :: Field t => (Matrix t) -> Integer -> (Matrix t)
mpow x 0 = ident $ cols x
mpow x 1 = x
mpow x n =
if (mod n 2) == 0 then
multiply (trans x) (mpow x $ n - 1)
else
multiply x (mpow x $ n - 1)
是否可以不使用if-else语句来重写此函数?
最佳答案
是的,您可以使用警卫。但是很多时候,它将在Haskell中编译成相同的内部表示形式。
import Numeric.Container
import Numeric.LinearAlgebra
mpow :: Field t => (Matrix t) -> Integer -> (Matrix t)
mpow x 0 = ident $ cols x
mpow x 1 = x
mpow x n | (mod n 2) == 0 = multiply (trans x) (mpow x $ n - 1)
| otherwise = multiply x (mpow x $ n - 1)