[英]How to pass arguments to functions in 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
....
如何將它們傳遞給我想要的功能? 請幫忙。
您必須像其他函數參數一樣傳遞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
...
在Haskell中,函數參數僅由空格分隔,因此如果您將函數定義為
runQuery queryName param1 param2 = <implementation>
您將具有一個名為runQuery
的三個參數,並帶有參數queryName
, param1
和param2
。 然后,您將使用相同的語法傳遞參數:
main = do
(name:param1:_) <- getArgs
param2 <- getLine
runQuery name param1 param2
在這里,我們調用帶有參數name
param1
和param2
的功能runQuery
,這些參數是從getArgs
和getLine
獲得的。
注意:
字符是一個運算符,它與函數調用語法無關,其目的是通過將元素放在現有列表的前面來構造新列表。 由於它也是一個構造函數,因此可以用於模式匹配,因此可以在(name:param1:_) <- getArgs
。 _
是可匹配任何內容的通配符模式,因此它代替了“在命令行中傳遞的其余args”。
您似乎也對Haskell的范圍界定感到困惑。 我強烈建議您閱讀有關開始Haskell的一些教程,我最喜歡的是Learn Has a Haskell For Great Good ,以便在嘗試更復雜的程序之前更加熟悉該語言的基本語法和語言規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.