有没有办法知道 Prolog 中的变量是什么类型?我有代码
test:-
writeln('Please enter the absolut file name :'),
read(FileName),
write('Opening file '),
write(FileName),nl,
open(FileName,read,Stream),
read_file(Stream,Lines),
close(Stream),
parseLines(Lines).
% used on reading the text file
read_file(Stream,[]) :-
at_end_of_stream(Stream).
% used on reading the text file
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
read_file(Stream,L).
parseLines(Lines):-
%primele 2 linii contin lista cu barbatii si list cu femeile iar
%restul liniilor contin preferintele acestora
Lines=[LB|[LF|LPrefs]],
writeln(LB),
atom_length(LB,2).
我得到了错误(运行测试时)
ERROR: [Thread pdt_console_client_0_Default Process] atom_length/2: Type error: `list' expected, found `man([m1,m2])'
输入文本文件包含
man = {m1, m2}.
women = {w1, w2}.
m1: w1 > w2.
m2: w1 > w2.
w1: m1 > m2.
w2: m1 > m2.
我正在尝试解析该文件,但是我尝试的任何操作都会收到该错误,例如从文件中读取的 Lines 中的内容不是 string,atoms ,我不知道该怎么做才能解决此问题。
PS关于如何快速/简单地解析文件的任何想法?奇怪的是,解析问题的输入比解决问题要困难得多。
谢谢。
编辑:我找到了复合谓词,从文件中读取的行是复合术语。Edit2:我的目标是读取该文件中的数据并对其进行断言或类似的,我想解决稳定的婚姻问题,我解决了但我无法弄清楚从该文件格式读取输入的这一部分。
Edit3:我有其他输入文件,其中包含以下行:
alan: christine > tina > zoe > ruth > sarah.
由于多个 > 运算符,当尝试将它们作为术语读取时,这条线失败了,所以我认为并不是我的所有输入都是有效的 Prolog