Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何接受输入并将其存储在prolog中_Prolog - Fatal编程技术网

如何接受输入并将其存储在prolog中

如何接受输入并将其存储在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

我需要设计一个谓词,以交互方式接受输入,创建一个空类列表的新学生记录。我还需要通过检查studentID不在数据库中来检查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)。在你的数据库文件之上?