Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用let fun x=x+定义Haskell函数;1表格_Haskell - Fatal编程技术网

用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")