gpt4 book ai didi

haskell - Haskell 如何从文件中读取 S 表达式?

转载 作者:行者123 更新时间:2023-12-02 05:38:53 26 4
gpt4 key购买 nike

有一些源文件,是S表达式。 Haskell 可以读取那些 s 表达式吗?我需要那些 s 表达式作为匹配的模式来执行 Haskell 程序(假设那些 s 表达式已经是我的 haskell 程序数据类型的格式)。例如,文件中的S表达式为:ArithBiOp Plus (AInt 5) (AInt 5),那么在haskell程序中,我可以将这一行匹配为ArithBiop opcode oprand1 operand2 .

最佳答案

如果您问是否有某种内置方法可以从此类文件中读取数据,那么答案是否定的,不是真的。

标准类型类 ReadShow 是一种穷人的序列化,做类似的事情,期望 read (show x) == x 并且作为 Haskell 源代码评估的 show x 的输出也等于 x。但是,如果您有来自其他来源的任意表达式,假设它们与 read 预期的格式匹配可能是不安全的,即使(如您的示例)它们非常相似。

另一方面,S 表达式大约是世界上最容易解析的东西,因此使用 Parsec 或类似的东西来读取数据可能是微不足道的。

如果您可以充分限制输入以确信它会匹配您从类型的默认实例获得的 show 的输出,那么 read 应该工作。请注意,默认的 Read 实例至少对伪括号和空格之类的事物具有一定的鲁棒性:

> read " Just 1" :: Maybe Int
Just 1
> read " Just 1" :: Maybe Int
Just 1
> read " Just (1)" :: Maybe Int
Just 1
> read "(Just (1))" :: Maybe Int
Just 1

等等。


哦,如果你问的是如何从文件中获取数据,你不需要做任何特别的事情。只需使用您用于其他任何操作的相同文件 I/O,并将字符串提供给 read 或解析器。对于简单的东西 the System.IO module应该做你需要的一切。

在使用 read 并且每行有一个值的极其简单的情况下,从标准输入读取 readLn函数是一个方便的快捷方式。

关于haskell - Haskell 如何从文件中读取 S 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com