我正在爲我的模塊中的一種數據類型編寫自定義閱讀功能。例如,當我做read "(1 + 1)" :: Data
時,我想讓它返回Plus 1 1
。我的數據聲明是data Data = Plus Int Int
。謝謝自定義閱讀功能的模式匹配
1
A
回答
2
您可以使用GHC的ReadP。
6
這聽起來像是更適合解析器的東西; Parsec是一個功能強大的Haskell解析器組合庫,我會推薦它。
3
我想介紹一下使用解析器的概念。但是,如果您絕對必須使用模式匹配,請執行如下操作:
import Data.List
data Expr = Plus Int Int | Minus Int Int deriving Show
test = [ myRead "(1 + 1)", myRead "(2-1)" ]
myRead = match . lexer
where
match ["(",a,"+",b,")"] = Plus (read a) (read b)
match ["(",a,"-",b,")"] = Minus (read a) (read b)
match garbage = error $ "Cannot parse " ++ show garbage
lexer = unfoldr next_lexeme
where
next_lexeme "" = Nothing
next_lexeme str = Just $ head $ lex str
相關問題
- 1. 模式匹配的自定義類型
- 2. 模式匹配上功能
- 3. 模式匹配功能
- 4. GHCI:不能在自定義類型的模式匹配
- 5. OCaml中的模式匹配功能
- 6. Clojure中的模式匹配功能?
- 7. FFMPEG I/O的自定義閱讀功能
- 8. F#撰寫模式匹配功能
- 9. F#模式匹配和功能
- 10. 模式匹配/檢查功能1
- 11. 模式匹配中的衝突定義
- 12. JSF/ICEFaces自定義組件設計模式&閱讀
- 13. 自動調用匹配特定模式的所有功能在VB.NET
- 14. Regex.split,如何閱讀匹配模式的左邊
- 15. JavaScript的正則表達式擴展`/模式/`自定義功能
- 16. Backbone.JS:模型功能的自定義url
- 17. 定義自定義功能
- 18. 定期匹配功能
- 19. 模式匹配的自定義數據類型
- 20. 自定義標籤的php模式匹配
- 21. 自定義功能區配置Zuul/Eureka
- 22. 自定義功能
- 23. 功能匹配
- 24. Lua模式匹配:指定匹配模式的問題
- 25. 的Java模式匹配特定模式來匹配
- 26. 閱讀功能 - FileSystemObject的
- 27. 使用自定義匹配
- 28. Moq自定義匹配
- 29. Logstash自定義匹配
- 30. 成功的Tuple2上的模式匹配
我不確定這裏的問題是什麼。你的話題提到了模式匹配,但問題的主體卻沒有。你說你正在編寫一個自定義閱讀功能,但是你沒有說你遇到了哪個問題。 – sepp2k 2010-04-01 22:53:02
問題是我想用字符串做一些模式匹配。例如:如果字符串是「(1 + 1)」,那麼它將返回加1 1。如果它是「(2 - 1)」,則它返回減號2 1.操作符可以是+ - * /。操作數可以是任何整數。但操作符必須以空格爲界,並且必須有括號括住整個表達式。 – altair211 2010-04-01 23:11:44