如何将参数传递给haskell中的函数?

时间:2014-08-27 22:20:24

标签: haskell

我试图将文件作为这样的参数:

main = do  
 (file1:file2:file3:_) <- getArgs
 checkdata
 command <- getLine
 runQuery(words command)

问题是这个runQuery(words命令)无法识别这些参数。

runQuery ("queryname":parameter1:parameter2) = do

 myfile1 <- readFile file1
 myfile2 <- readFile file2
 myfile3 <- readFile file3

我得到的错误是:

Not in scope: file1
....

如何将它们传递给我想要的功能?请帮忙。

2 个答案:

答案 0 :(得分:2)

您必须像其他函数参数一样将file1等传递给runQuery

main = do  
 (file1:file2:file3:_) <- getArgs
 checkdata
 command <- getLine
 runQuery file1 file2 file3 (words command)

runQuery file1 file2 file3 ("queryname":parameter1:parameter2) = do
 ...

答案 1 :(得分:1)

在Haskell中,函数参数只是用空格分隔,所以如果你有一个定义为

的函数
runQuery queryName param1 param2 = <implementation>

你将拥有一个名为runQuery的三个参数的函数,其参数为queryNameparam1param2。然后,您将使用相同的语法传递参数:

main = do
    (name:param1:_) <- getArgs
    param2 <- getLine
    runQuery name param1 param2

我们在这里调用函数runQuery,其参数nameparam1param2来自getArgs和{{1} }。

请注意,getLine字符是一个运算符,它与函数调用语法无关,其目的是通过将元素添加到现有列表的前面来构造新列表。由于它也是构造函数,因此可以用于模式匹配,因此可以在:中使用它。 (name:param1:_) <- getArgs是一个匹配任何内容的通配符模式,因此它取代了#34;其余的args在命令行传入#34;。

你似乎也对Haskell中的作用域感到困惑。我强烈建议您阅读一些关于开始Haskell的教程,我最喜欢的是Learn You a Haskell For Great Good,以便在尝试更复杂的程序之前更熟悉该语言的基本语法和语言规则。