【问题标题】:Read entire text file into a Prolog variable将整个文本文件读入 Prolog 变量
【发布时间】:2012-06-19 18:17:19
【问题描述】:

我很难弄清楚这一点,尽管这是用其他语言做的最简单的事情之一:有没有一种简单的方法可以将文本文件的全部内容读入 Prolog 变量?

【问题讨论】:

    标签: prolog swi-prolog dcg


    【解决方案1】:

    用 DCG 简单说明你想要描述的内容,然后使用 library(pio) 从文件中解析:

    :- use_module(library(pio)).
    
    all([])     --> [].
    all([L|Ls]) --> [L], all(Ls).
    

    例子:

    ?- once(phrase_from_file(all(Ls), 'all.pl')).
    Ls = [10, 58, 45, 32, 117, 115, 101, 95, 109|...].
    

    【讨论】:

    • 谢谢!这对我有用。我曾看到关于使用 DCG 进行任意输入的讨论,但无法连接到如何使用它来读取任意文件。
    • @sdesciencelover:library(pio) 的巨大优势只有在您已经使用非终端进行处理时才会显示出来。 phrase_from_file/2 不会一口气读取整个文件内容,而是会进行一些内部缓冲:通过这种方式,可以在恒定空间中处理任意大小的文件。
    • 为什么一次/1?理想情况下,SWI 应该检测确定性。考虑使用 call_semidet/1:stackoverflow.com/questions/12939794/…
    【解决方案2】:

    library(readutil) 中有一些内置函数:见read_file_to_codesread_file_to_terms

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 1970-01-01
      • 2012-11-10
      • 2021-04-16
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      相关资源
      最近更新 更多