在Prolog规则中,我尝试将变量从案例传递到另一个但是它没有工作
plane(c130,propeller,high,conventional,conventional,under-wing).
plane(c141,jet,high,sweptback,ttail,upperwing).
plane(c5a,jet,high,sweptback,ttail,none).
plane(b747,jet,low,sweptback,conventional,aftcockpit).
planeinfo:-
plane(Name,Eng,Wing,Shape,Tail,Bulges),
write(Name),put(10),
write(Eng),put(10),
write(Wing),put(10),
write(Shape),put(10),
write(Tail),put(10),
write(Bulges).
getplane:-
write('enter engine type '),
read(Eng),
Eng == 'propeller' ,Name ='c130',
planeinfo,!;
write('enter wing postion'),
read(Wing),
Wing == 'low' , Name = 'b747',
planeinfo,!;
write('enter the bulges type'),
read(Bulges),
Bulges == 'upperwing' , Name = 'c141', write(Eng),write(Wing),
planeinfo,!;
write('enter wing shape'),
read(Shape),
write('enter tail'),
read(Tail),
planeinfo,
write("Plane Is Not Found , Please Retry"),
repeat.
这是输出
?- getplane.
enter engine type jet.
enter wing postion|: high.
enter the bulges type|: upperwing.
_L155_L156c130
propeller
high
conventional
conventional
under-wing
true.
除了错误的输出。
答案 0 :(得分:2)
我尝试将变量从case传递到另一个但是它不起作用
这是因为or运算符(;
,发布第一个planeinfo,!
)会激活回溯并取消第一个read/1
的效果。
如果要保持引擎(Eng
),翼(Wing
)和凸起(Bulges
)的读取值,则必须使用括号来限制回溯效果;
运算符。
不确定您想要获得什么,但......以下是一个示例
getplane:-
write('enter engine type '),
read(Eng),
( Eng == 'propeller' ,Name ='c130',
planeinfo,!
;
write('enter wing postion'),
read(Wing),
( Wing == 'low' , Name = 'b747',
planeinfo,!
;
write('enter the bulges type '),
read(Bulges),
( Bulges == 'upperwing' , Name = 'c141', write(Eng),write(Wing),
planeinfo,!
;
write('enter wing shape '),
read(Shape),
write('enter tail '),
read(Tail),
planeinfo,
write("Plane Is Not Found , Please Retry"),
repeat
)
)
).