2017-03-12 1 views
1

비어있는 클래스 목록으로 새 학생 레코드를 만들기 위해 대화식으로 입력을 받아들이는 술어를 디자인해야합니다. 또한 studentID가 데이터베이스에 없는지 확인하여 학생이 아직 시스템에 없는지 확인해야합니다. 추가/3 : 입력을 받아 들여 프롤로그에 저장하는 방법

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

출력은 다음이

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

같아야 학생 데이터베이스 것은 내 코드

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)). 

내가지고있어 오류가 정의되지 않은 프로 시저 : 입력을 읽은 후 assertz (학생 ID를 물어 본 후) 어떻게하면이 문제를 해결할 수 있습니까? 코드? 당신의 술어 때문에 addStudent에서

+0

나는 당신의 오류를 장담은'assertz/3' 아니라'assertz' 말한다 패러다임. 문제는 단지 하나의 인자를 요구하는'assertz/1'에 3 개의 인자를주는 것입니다. 나는 당신이 당신의 괄호를 제대로 적용하지 않았다고 의심합니다. '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

줄을 추가 했습니까? - 동적 (학생/3). 데이터베이스 파일 맨 위에 있습니까? – PapaEcho

관련 문제