2017-03-12 26 views
1

入力をインタラクティブに受け入れる述語を設計して、空のクラスリストを持つ新しい生徒記録を作成する必要があります。また、studentIDがデータベースにないことを確認して、学生がまだシステムにいないことを確認する必要があります。入力を受け入れてプロローグに格納する方法

これは

% name, studentId, course list 
student(name(jane, [ann]), 5555, ['CS3230']). 

出力はここ

?- addStudent. 
Student last name: doe. 
Student first name: [jim,k]. 
Student Id: 23123. 
true. 

このようにする必要があり、学生のデータベースは、私がERROR取得しています私のコード

addStudent :- write('Student last name: '), 
      read(L), 
      write('Student first name: '), 
      read(F), 
      write('Student ID: '), 
      read(ID), 
      assertz(student(name([L,F])),ID,_), 
      not(member(ID,student)). 

です:追加/ 3:不定プロシージャ:入力を読み込んだ後にassertz(生徒IDを尋ねた後) どうすればこの問題を解決できますかコード?あなたの述語addStudentで

+0

「assertz/3」と言うエラーは、「assertz」だけではありません。問題は、assertz/1に3つの引数を与えて、ただ1つの引数しか期待できないことです。私はちょうどあなたの括弧を正しく適用していないと思う。 'assertz(student(name([L、F])、ID、_))'を試してください。 – lurker

答えて

0

、あなたのような定義中間述語呼び出し:宿題の残りの部分と

addStudent :- 
[...] 
read(ID), 
insertStd(L,F,ID). 

%Case where student exist, will return true and not get to the second predicate% 
insertStd(L,F,ID) :- student(name(L,F),ID,_). 

%Case where student do not exsist, will insert it to the fact database% 
insertStd(L,F,ID) :- assertz(student(L,F),ID,[])). 

幸運を、質問はこのおかしく割り当てで簡単に取得されていません!

プログラミングパラダイムの犠牲者

+0

ありがとう!ハハはあなたにもっと同意できませんでした。 – user7630822

+0

エラー:assertz/1:静的プロシージャー「student/3」を変更する権限がありません。このエラーが発生します。どのようにそれを修正するための任意のアイデア? – user7630822

+0

という行を追加しましたか? - dynamic(student/3)。データベースファイルの上に ? – PapaEcho

関連する問題