2
即使是其他語言中最簡單的事情之一,我也很難弄清楚這一點:是否有一種簡單的方法來讀取文本文件的全部內容變成一個Prolog變量?將整個文本文件讀入Prolog變量
即使是其他語言中最簡單的事情之一,我也很難弄清楚這一點:是否有一種簡單的方法來讀取文本文件的全部內容變成一個Prolog變量?將整個文本文件讀入Prolog變量
只需用DCG說明你想用什麼來形容,並使用庫(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
@sdesciencelover:'library(pio)'的一大優點只會顯示出來,如果你已經對非終結者進行了處理。 'phrase_from_file/2'不是一次性讀取整個文件內容,而是做一些內部緩衝:這樣,abiritrary大小的文件就可以在恆定的空間中處理。 – false
爲什麼一次/ 1?理想情況下,SWI應該檢測確定性。考慮使用call_semidet/1:http://stackoverflow.com/questions/12939794/stack-overflow-in-prolog-dcg-grammar-rule-how-to-handle-large-lists-efficiently/12942551#12942551 – false