2016-12-18 4 views
1

В правиле Пролога, я пытался передать переменный от случая к другому, но он не работаетПролог не проходит переменные

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. 

в дополнении к неправильному выходу.

+1

Что значит «не работает» означает? – Enigmativity

ответ

2

Я попытался передать переменную от случая к другому, но он не работает

Это потому, что или оператор (;, должность первого 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 
     ) 
    ) 
). 
Смежные вопросы