显示请求事实的元素
Display elements of requested fact
我是 Prolog 的新手,我很难理解我做错了什么。我正在尝试以一个关键字的形式获取用户输入,然后显示 class 中任何一个的完整详细信息。
如果我以这种格式查询,我的代码将显示信息 course(managing, A, B, C, D, E)
但当我尝试简化它时将无法工作。
有人可以告诉我应该如何编辑我的代码,以便它会询问我想要哪门课程的信息,并且在显示与该课程相关的所有信息之前只需要一个单词的回答吗?
course(
accouting,
acc10707,
day(tuesday),
time(1100, 1250),
prof(ayesha, mujib),
b228
).
course(
managing,
mng10247,
day(thursday),
time(1000, 1150),
prof(brian, morris),
b228
).
course(
communication,
com00207,
day(monday),
time(1000, 1250),
prof(ali, bec),
b727
).
details :-
write('Please enter unit keyword.'),
nl,
read(Name),
course(Name,Code,Day,Time,Prof,Room),
write(Name,Code,Day,Time,Prof,Room).
使用您提供的代码,我在 gnu-prolog 1.4.4 版中遇到以下错误:
| ?- details.
Please enter unit keyword.
communication.
uncaught exception: error(existence_error(procedure,write/6),details/0)
有什么问题吗?
details/0
的最后一个进球是write(Name,Code,Day,Time,Prof,Room)
。
您无意中尝试使用 write/<b>6</b>
,它不存在。
解决方案?
使用 prolog-toplevel 而不是在 details/0
!
中执行副作用
让我们定义details_of/<b>2</b>
。它的第一个参数是结构 c/6
.
details_of(Details,Course_name) :-
Details = c(Course_name,Code,Day,Time,Prof,Room),
course(Course_name,Code,Day,Time,Prof,Room).
示例使用:
| ?- details_of(X,communication).
X = c(communication,com00207,day(monday),time(1000,1250),prof(ali,bec),b727)
yes
快速修复: 而不是 write/6
使用 write/1
和结构 c/6
.
将write(Name,Code,Day,Time,Prof,Room)
替换为
write(c(Name,Code,Day,Time,Prof,Room))
.
| ?- details.
Please enter unit keyword.
communication.
c(communication,com00207,day(monday),time(1000,1250),prof(ali,bec),b727)
yes
我是 Prolog 的新手,我很难理解我做错了什么。我正在尝试以一个关键字的形式获取用户输入,然后显示 class 中任何一个的完整详细信息。
如果我以这种格式查询,我的代码将显示信息 course(managing, A, B, C, D, E)
但当我尝试简化它时将无法工作。
有人可以告诉我应该如何编辑我的代码,以便它会询问我想要哪门课程的信息,并且在显示与该课程相关的所有信息之前只需要一个单词的回答吗?
course(
accouting,
acc10707,
day(tuesday),
time(1100, 1250),
prof(ayesha, mujib),
b228
).
course(
managing,
mng10247,
day(thursday),
time(1000, 1150),
prof(brian, morris),
b228
).
course(
communication,
com00207,
day(monday),
time(1000, 1250),
prof(ali, bec),
b727
).
details :-
write('Please enter unit keyword.'),
nl,
read(Name),
course(Name,Code,Day,Time,Prof,Room),
write(Name,Code,Day,Time,Prof,Room).
使用您提供的代码,我在 gnu-prolog 1.4.4 版中遇到以下错误:
| ?- details.
Please enter unit keyword.
communication.
uncaught exception: error(existence_error(procedure,write/6),details/0)
有什么问题吗?
details/0
的最后一个进球是write(Name,Code,Day,Time,Prof,Room)
。您无意中尝试使用
write/<b>6</b>
,它不存在。
解决方案?
使用 prolog-toplevel 而不是在
中执行副作用details/0
!让我们定义
details_of/<b>2</b>
。它的第一个参数是结构c/6
.details_of(Details,Course_name) :- Details = c(Course_name,Code,Day,Time,Prof,Room), course(Course_name,Code,Day,Time,Prof,Room).
示例使用:
| ?- details_of(X,communication). X = c(communication,com00207,day(monday),time(1000,1250),prof(ali,bec),b727) yes
快速修复: 而不是
write/6
使用write/1
和结构c/6
.将
write(Name,Code,Day,Time,Prof,Room)
替换为write(c(Name,Code,Day,Time,Prof,Room))
.| ?- details. Please enter unit keyword. communication. c(communication,com00207,day(monday),time(1000,1250),prof(ali,bec),b727) yes