Я изучаю Пролог самостоятельно.У меня есть текстовый файл, который выглядит следующим образом:
table("0","Nicosia 2013 Vulkà Bianco (Etna)","Italy","White Blend","14","Kerin O’Keefe","87").
table("1","Quinta dos Avidagos 2011 Avidagos Red (Douro)","Portugal","Portuguese Red","15","Roger Voss","87").
table("2","Rainstorm 2013 Pinot Gris (Willamette Valley)","US","Pinot Gris","14","Paul Gregutt","87").
table("3","St. Julian 2013 Reserve Late Harvest Riesling (Lake Michigan Shore)","US","Riesling","13","Alexander Peartree","87").
У меня есть 400 строк, и я хочу утверждать их в прологе.Я опробовал несколько вариантов, и этот код является последним:
load_file_data(File) :-
open(File, read, Stream),
repeat,
read(Stream, Term),
( Term = end_of_file
-> true
; assert(Term),
fail
),
close(Stream).
Эта и несколько других версий утверждают, но не так, как я ожидал.Вот как выглядят утвержденные факты:
table([48], [78, 105, 99, 111, 115, 105, 97, 32, 50, 48, 49, 51, 32, 86, 117, 108, 107, 195, 402, 194, 160, 32, 66, 105, 97, 110, 99, 111, 32, 32, 40, 69, 116, 110, 97, 41], [73, 116, 97, 108, 121], [87, 104, 105, 116, 101, 32, 66, 108, 101, 110, 100], [49, 52], [75, 101, 114, 105, 110, 32, 79, 195, 162, 226, 8218, 172, 226, 8222, 162, 75, 101, 101, 102, 101], [56, 55]).
table([49], [81, 117, 105, 110, 116, 97, 32, 100, 111, 115, 32, 65, 118, 105, 100, 97, 103, 111, 115, 32, 50, 48, 49, 49, 32, 65, 118, 105, 100, 97, 103, 111, 115, 32, 82, 101, 100, 32, 40, 68, 111, 117, 114, 111, 41], [80, 111, 114, 116, 117, 103, 97, 108], [80, 111, 114, 116, 117, 103, 117, 101, 115, 101, 32, 82, 101, 100], [49, 53], [82, 111, 103, 101, 114, 32, 86, 111, 115, 115], [56, 55]).
table([50], [82, 97, 105, 110, 115, 116, 111, 114, 109, 32, 50, 48, 49, 51, 32, 80, 105, 110, 111, 116, 32, 71, 114, 105, 115, 32, 40, 87, 105, 108, 108, 97, 109, 101, 116, 116, 101, 32, 86, 97, 108, 108, 101, 121, 41], [85, 83], [80, 105, 110, 111, 116, 32, 71, 114, 105, 115], [49, 52], [80, 97, 117, 108, 32, 71, 114, 101, 103, 117, 116, 116], [56, 55]).
И что-то вроде этого возвращает true:
?- table("1","Quinta dos Avidagos 2011 Avidagos Red(Douro)","Portugal","Portuguese Red","15","Roger Voss","87").
true.
И когда я пытаюсь получить поле, это результат:
table("364",X,"US","Pinot Noir","48","Paul Gregutt","95").
X = [87, 105, 110, 100, 101, 114, 108, 101, 97|...] ;
false.