不确定您想要什么,但这只是语法错误。也许您想检查是否相等(然后使用==
而不是=
)。但情况可能并非如此,因为返回类型应该是Bool
,而不是String
。此外,该示例看起来很奇怪,因为并非函数的所有参数weekday
都在其定义中使用。
更新
我怀疑,你的代码应该是这样的:
weekday :: Int -> Int -> Int -> String
weekday jahr monat tag =
let name = (mod ( tag + x + (div ( 31 * m ) 12 )) 7 )
in
case name of
0 -> "Sonntag"
1 -> "Montag"
2 -> "Dienstag"
3 -> "Mittwoch"
4 -> "Donnerstag"
5 -> "Freitag"
6 -> "Samstag"
where
y = jahr - ( div ( 14 - monat ) 12 )
x = y + ( div y 4 ) - ( div y 100 ) + ( div y 400 )
m = monat + (12 * ( div ( 14 - monat ) 12 )) - 2
它甚至可以工作(虽然我没有检查结果):http: //ideone.com/YAKXTU
您应该更多地了解基本 Haskell 构造let
和的含义where
,并且有一本好书“Learn You a Haskell for Great Good!” 我推荐的。祝你好运!