我是学习Haskell的学生.我的教科书以下面的例子为例:
(*) :: Int -> Int -> Int
m * 0 = 0
m * (n + 1) = m + (m * n)
Run Code Online (Sandbox Code Playgroud)
然后它要求我们以相同的方式重新定义^(正整数取幂)运算符.我假设以下内容可行:
(^) :: Int -> Int -> Int
m ^ 0 = 1
m ^ (n + 1) = m * (m ^ n)
Run Code Online (Sandbox Code Playgroud)
但是,它无法编译,在该(n + 1)位上给出"模式中的解析错误" .出于好奇,我尝试了本书示例中定义的乘法运算符,并给出了相同的错误.
教科书在哪里/如何出错,我该如何纠正呢?
感谢那些指出这个问题在几年前得到解决的人.由于删除了n + k模式匹配的"特征",我如何修改教科书示例以遵循现代良好实践?
简而言之,我现在知道为什么原件不起作用,但它怎么能改变工作呢?
您只需更换n用n-1在等式的两边:
(*) :: Int -> Int -> Int
m * 0 = 0
m * ((n-1) + 1) = m + (m * (n-1))
Run Code Online (Sandbox Code Playgroud)
这是无效的语法,但当然"简化"到正确的版本
(*) :: Int -> Int -> Int
m * 0 = 0
m * n = m + (m * (n-1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |