用let fun x=x+定义Haskell函数;1表格
如果我有以下功能:用let fun x=x+定义Haskell函数;1表格,haskell,Haskell,如果我有以下功能: f::[a]->Integer f [] = 0 f (x:cx) = 1 + (f cx) 如何用“let”定义main中的函数 我知道我可以在main中定义一个函数:例如 let f x = x + 1 但是我如何为“f[]=0”进行模式匹配呢 谢谢你仍然可以用同样的方法: main = let f [] = 0 f (x:cx) = 1 + (f cx) in print (f "abc") 或 关键的一点是,两个
f::[a]->Integer
f [] = 0
f (x:cx) = 1 + (f cx)
如何用“let”定义main中的函数
我知道我可以在main中定义一个函数:例如
let f x = x + 1
但是我如何为“f[]=0”
进行模式匹配呢
谢谢你仍然可以用同样的方法:
main =
let f [] = 0
f (x:cx) = 1 + (f cx)
in
print (f "abc")
或
关键的一点是,两个方程中的
f
s必须对齐并缩进得比let
更多。请注意,这里的f
与标准函数length
完全相同,该函数在序言中定义,因此可用于所有不需要导入的程序。(唯一的区别在于Prelude函数产生的是Int
而不是整数,但这只在计算大于2^32的列表长度时才重要,我真的希望你不是。即使在这种情况下,你也可以使用Data.List
中的genericLength
)所以没有必要自己定义这个。(除非实现它是一个家庭作业问题,但是将它放在let
中很奇怪)感谢您通知我Haskell中有一个名为“length”的函数。我的问题与函数无关。我的问题是“如何使用模式匹配在main中定义函数”@melpomene理解我的问题,并给出了正确的答案。@melpomene给出了很好的答案,因为他/她知道自己在说什么。他/她还提到了Haskell中的缩进,因为Haskell缩进对于beginner@1234您是否理解尝试和有效解决方案之间的区别?
main =
let
f [] = 0
f (x:cx) = 1 + (f cx)
in
print (f "abc")