如何接受输入并将其存储在prolog中
我需要设计一个谓词,以交互方式接受输入,创建一个空类列表的新学生记录。我还需要通过检查studentID不在数据库中来检查student是否还不在系统中 这是学生数据库如何接受输入并将其存储在prolog中,prolog,Prolog,我需要设计一个谓词,以交互方式接受输入,创建一个空类列表的新学生记录。我还需要通过检查studentID不在数据库中来检查student是否还不在系统中 这是学生数据库 % name, studentId, course list student(name(jane, [ann]), 5555, ['CS3230'] ). 输出应该是这样的 ?- addStudent. Student last name: doe. Student first name: [jim,k]. Student
% 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)).
我收到错误:add/3:未定义过程:读取输入后(询问学生id后)assertz
如何解决此问题以使用代码?在谓词addStudent中,调用您定义为的中间谓词:
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,[])).
祝你在剩下的作业中好运,在这个奇怪的作业中,问题并没有变得容易
编程范例的受害者之一在谓词addStudent中,调用您定义为这样的中间谓词:
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,[])).
祝你在剩下的作业中好运,在这个奇怪的作业中,问题并没有变得容易
编程范例的受害者之一我敢打赌,你的错误是
assertz/3
而不仅仅是assertz
。问题是您给assertz/1
提供了3个参数,它只需要一个参数。我怀疑你只是没有正确地使用括号。试试assertz(学生(姓名([L,F]),ID,))
。我敢打赌你的错误是assertz/3
而不仅仅是assertz
。问题是您给assertz/1
提供了3个参数,它只需要一个参数。我怀疑你只是没有正确地使用括号。请尝试assertz(学生(姓名([L,F]),ID,z))
。谢谢!哈哈,非常同意你的看法。错误:assertz/1:没有修改静态过程'student/3'的权限。我收到了这个错误。你知道如何修复它吗?你添加了一行:-动态(学生/3)。在您的数据库文件之上?谢谢!哈哈,非常同意你的看法。错误:assertz/1:没有修改静态过程'student/3'的权限。我收到了这个错误。你知道如何修复它吗?你添加了一行:-动态(学生/3)。在你的数据库文件之上?