【问题标题】:How to accepts inputs and store them in prolog如何接受输入并将它们存储在序言中
【发布时间】:2017-03-12 12:34:52
【问题描述】:

我需要设计一个谓词,它以交互方式接受输入以创建一个带有空班级列表的新学生记录。我还需要通过检查 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. 

这是我的代码

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

我收到 ERROR: add/3: Undefined procedure: assertz 读取输入后(询问学生 ID 后) 如何解决此问题以使我的代码正常工作?

【问题讨论】:

  • 我敢打赌你的错误是 assertz/3 而不仅仅是 assertz。问题是您要向 assertz/1 提供 3 个参数,它只需要一个参数。我怀疑您只是没有正确应用括号。试试assertz(student(name([L,F]),ID,_))

标签: prolog


【解决方案1】:

在您的谓词 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/1:无权修改静态过程 `student/3' 我收到此错误。知道如何解决吗?
  • 您是否添加了行:-动态(学生/3)。在您的数据库文件之上?
猜你喜欢
  • 2022-07-27
  • 2021-06-30
  • 2023-01-17
  • 2021-12-03
  • 2022-12-23
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 2021-09-18
相关资源
最近更新 更多