我正在为我的模块中的一种数据类型编写自定义阅读功能。例如,当我做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