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.
私はそのファイルを解析しようとしていますが、ファイルから読み取った行にあるものが string,atoms ではないなど、何を試してもそのエラーが発生します。これを修正するために何をすべきかわかりません。
PSファイルを高速/単純に解析する方法についてのアイデアはありますか? 問題の入力を解析することは、問題を解決することよりもはるかに難しいというのは奇妙に感じます。
ありがとう。
編集:複合述語が見つかりました。ファイルから読み取られた行は複合用語です。Edit2: 私の目標は、そのファイルのデータを読み取り、それをアサートすることです。安定した結婚の問題を解決したいのですが、このファイル形式から入力を読み取るこの部分を理解できません。
Edit3:次のような行を持つ他の入力ファイルがあります。
alan: christine > tina > zoe > ruth > sarah.
この行は、複数の > 演算子のために read_file_to_terms で用語として読み取ろうとすると失敗するため、すべての入力が有効であるとは限りません Prolog