簡體   English   中英

在Haskell中閱讀

[英]Read in Haskell

可以使用Scheme原語讀取,該原語消耗字符流並輸出s表達式(sexpr)。

我正在嘗試在Haskell中編寫解析器。 相當於什么? 我將如何實現它,以便在傳遞"{+ {- 3 4} 7}"后返回(list '+ (list '- 3 4) 7) (或等效值)?

提前致謝。

您最好使用適當的解析庫,例如uu-parsinglibpolyparseparsec

可以濫用Read將任意String解析為某種數據表示形式(必須定義)。

我認為,haskell的所有新手都應該在想知道“我能做些什么?”時提出的第一個問題。 是“類型應該是什么?”。 如果您想做您想做的事,那么我建議像這樣編寫AST:

data AST = Num Int
         | Add AST AST
         | Sub AST AST
         | Mul AST AST
         etc.

然后,您可以編寫可能具有以下類型的解析器:

parseAST :: String -> AST

要實際編寫此解析器,您可能需要使用諸如parsec之類的方法,盡管如果語法是您所描述的方式,那么您可以手工編寫自己的解析器,這樣會很好地工作(並幫助您學習)。

從那里,您可以編寫可以評估AST的函數,也可以根據需要對其進行操作。 但重要的是要意識到您不能*在運行時創建新代碼,因為這很可能不是類型安全的,或者根本不是安全的。

*我敢肯定,有很多方法可以做到這一點,但是我認為,培養起步的Haskell程序員在進入更高級的主題之前應該學習的思想更為重要。

暫無
暫無

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

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