簡體   English   中英

如何將參數傳遞給haskell中的函數?

[英]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的三個參數,並帶有參數queryNameparam1param2 然后,您將使用相同的語法傳遞參數:

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

在這里,我們調用帶有參數name param1param2的功能runQuery ,這些參數是從getArgsgetLine獲得的。

注意:字符是一個運算符,它與函數調用語法無關,其目的是通過將元素放在現有列表的前面來構造新列表。 由於它也是一個構造函數,因此可以用於模式匹配,因此可以在(name:param1:_) <- getArgs _是可匹配任何內容的通配符模式,因此它代替了“在命令行中傳遞的其余args”。

您似乎也對Haskell的范圍界定感到困惑。 我強烈建議您閱讀有關開始Haskell的一些教程,我最喜歡的是Learn Has a Haskell For Great Good ,以便在嘗試更復雜的程序之前更加熟悉該語言的基本語法和語言規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM