2012-04-02 8 views
1

ファイルストリーム操作PROLOGPROLOGファイルストリームの操作。

を処理するための用語抽出、私はそれが新しい学生プロファイル(転写) を取り、student_profilesのデータベースと比較することができ ある助言事例ベース推論に学術用 サブシステムを働いています の場合、完全一致でない場合は最も一致するものを検索してください。

私はまだ私がのがstudent.plで発見され

student_profile/4 : student_profile(L1, name, L2, L3) 

を言わせて、特定の述語をファイルを開き、 を抽出しようとしている言語と に非常に精通していませんよ。

私は.plのファイルから述語を抽出した後、私はそれを変数に割り当て、それを を分割することが ようにしたいので、私は に(この場合はL1で)最初の引数を抽出することができますいくつかの計算を行います。

これは私がこれまで持っているものです。
私は、ファイルを開いていて、私は学生のプロファイルまたは転写産物で見つかった述語​​ のリスト全体を見ることができますよ。

load :- open('h:/AAS/Novel_Profiles/vivian.pl', read, Stream), 
     read(Stream, X), 
     read_data(Stream, X, StudentP), 
     write(StudentP), 
     close(Stream). 

read_data(_Stream, end_of_file, []) :- !. 

read_data(Stream, X, [X|StudentP]) :- 
    read(Stream, Y), 
    read_data(Stream, Y, StudentP). 

私は用語を抽出し、さらなる処理のためにそれを使用する方法の例を探していますが、私は には運がなかったしている(または多分私は右の用語を使用していません)。

ご協力いただければ幸いです。

答えて

1

あなたload述語は、あなたがロードされたリスト内のいくつかのレコードと一致するメンバー/ 2を使用することができます「リターン」リスト読んでください、または後で使用するために、assertzでそれをキャッシュ...

load(StudentData) :- open('h:/AAS/Novel_Profiles/vivian.pl', read, Stream), 
     read(Stream, X), 
     read_data(Stream, X, StudentData), 
     write(StudentP), 
     close(Stream). 

..

?- load(L), 
    member(student_profile(Student, vivian, L2, L3), L), 
    writeln(vivian(Student, L2, L3)). 

しかし、より単純な方法があります:consultファイルを直接クエリします。

load :- consult('h:/AAS/Novel_Profiles/vivian.pl'). 

あなたのファイルが構文的に正しいかどうかを確認するには、両方の方法(読み込みまたは相談)が必要です。ファイルが持つ可能性のある問題がPrologから通知されます。

相談に成功した後、各ファクト(またはルール)が使用できるようになりました...あなたの迅速な対応のための

?- student_profile(Student, vivian, L2, L3), 
    writeln(vivian(Student, L2, L3)). 
+0

おかげで、それは私が照会したい場合は、同じ手順が適用されるという場合でありますプログラム内のデータ? member_sp(StudentPred、StudentData)というストリームを閉じる前に、このようなものを追加するのと同様に、もちろんそのようなものを底部で定義していますか? – user1308665

+0

はい、Prologのようなインタプリタは、プログラム開発の一般的な方法としてREPL(読み取り、評価、印刷、ループ)を使用します。 – CapelliC

+0

お手数をおかけしていただきありがとうございます。お聞きしたいことがもう1つあります。非常にシンプルに思えるかもしれませんが、私はあまり理解していません。一度私はファイルを読んだ。必要なデータは、[student_predicate([2Dベクトル]、Vivian、[撮影(コース)、...]、[])| _A]という複合語の形をしています。V = [Vector]、Name = vivian、Courses = [撮影(コース)、...]、Recommendations = []このような用語の構造は、 ?私はスクリプト内からこれをやりたい私は(unvi)= ../2 and functor/3 – user1308665