【发布时间】:2015-03-18 22:26:09
【问题描述】:
您好,我是 Prolog 的新手,我认为我在绑定变量时遇到了问题。 我正在解决的问题是this。
这就是我迄今为止想出的:
:- dynamic lecture/1.
%teacherNames(['Paul'],[['Bsc4'],['Bsc1']], [['AI'],['Games Design']]).
teacherNames(['Paul'],['Bsc4'],['AI']).
teacherNames(['Paul'],['Bsc1'],['Games_dev']).
group(['Hsoftware'],['Bsc4'],['15']).
group(['total'],['Bsc1'],['127']).
group(['games'],['Bsc1'],['52']).
group(['software'],['Bsc1'],['35']).
group(['web'],['Bsc1'],['15']).
group(['systems'],['Bsc1'],['25']).
room(['B1041'],['32']).
room(['B2008'],['32']).
room(['A0006'],['140']).
student(['Bill Bloggs'],['s00000123'],['Bsc4']).
student(['Andera Martin'],['s00000100'],['software']).
assignRoom:-
%retract(lecture(TeachersName,TeachersGroup,TeachSubject)),
write('teachers name?'),nl,
read(TeachersName),
%teacherNames(TeachersName),nl,
write('Group for class'),nl,
read(TeachersGroup),
%write('Subject?'),nl,
%read(TeachSubject),
teacherNames(TeachersName,TeachersGroup,TeachSubject),
%GroupName == TeachersGroup,
%group(GroupName,_,_),
write('Choose Stream'),nl,
read(Stream),
write('time period for class'),nl,
read(Period),
group(Stream,_,_),
write('choose room'),nl,
read(Room),
room(Room,_),
%%assertz(lecture(GroupName,Subject)).
asserta(lecture(TeachersName,TeachersGroup,TeachSubject,Period,Room)).
我的问题是我希望“Paul”只能将 AI 教给“Bsc4”,并且只能将“Games_dev”教给“Bsc1”。 所以在这种情况下,如果我要输入:
assignRoom.
Paul %teachers name
Bsc4 %the group that will be going to the class
Hsoftware %the stream name
1 %the time the class will be on
B1041 %the room the class will be held in
这行得通,但如果我尝试输入除这些值之外的任何内容,它就会失败。 我希望它的工作方式是,如果组为“Bsc4”,则只有 Hsoftware 为真,如果组名为“Bsc1”,Hsoftware 为假,而软件、网络等为真,并且适当的值将绑定到讲座。
编辑:
我改变了一些东西,如果我不考虑用户错误,我得到的效果会更好(这将适用于本示例)。 新代码在this link 我现在遇到的问题是 Room 变量的绑定..
如果我输入
assignRoom.
Paul.
Bsc1.
web.
1.
A0006.
我得到了我想要的结果,除了 RoomNumber 总是输出为
lecture(X,C,V,B,N,Y).
Paul %correct
Bsc1 %correct
web %correct
games_dev %correct
1 %correct
B1041 %Should be A0006
所以我现在要问的是如何修复房间号的绑定。
【问题讨论】:
-
您对所有数据组件使用列表构造是否有特定原因? 例如,为什么是
room(['B1041'],['32']).而不是room('B1041', 32)?任何单一值都不需要是列表。您只需要一个列表,您需要允许零个、一个或多个元素的灵活性。 -
老实说,我什至不知道有什么不同,我只是认为这就是语法。
-
这是基本的 Prolog 语法。在处理这个程序之前,您可能想查看一些介绍性 Prolog 教程或获得一本好的介绍性 Prolog 书。
-
不幸的是,我的时间真的很短,发现所有这些 Prolog 的东西都非常令人困惑,哈哈
-
选房的标准是什么?在目前的形式中,只有第一个事实室会被统一。
标签: prolog