Я пытаюсь создать правило для присвоения, но это не похоже на работу, присвоение простая карта трубки, и одна из задач состоит в том, чтобы найти:Пролог adjecent2interchange
станции, которые являются смежными и обмена, но не являются общими станциями.
Я уже сделал prequisite задачи, чтобы найти, сколько линий проходят через станцию:
station_numlines(Station,NumberOfLines) :-
findall(M, station(Station,M), Ms),
sort(Ms, SortedMs),
length(SortedMs, NumberOfLines).
Теперь Ive получил, чтобы сделать правило, которое проверяет, какие станции не перепутать станции, в формате:
adjecent2interchange(NonInterStation, InterChangeStation) :-
Как я могу использовать station_numlines, чтобы найти все станции обмена?
Как я предполагаю, запустите количество строк на всех станциях из списка, а затем просто сохраните его и распечатайте все станции обмена.
Я просто безнадежен в том, чтобы наложить это на себя с почти 0 опытом на очень запутанном языке.
станции:
station(al,metropolitan).
station(bs,metropolitan).
station(fr,metropolitan).
station(kx,metropolitan).
station(ls,metropolitan).
station(bg,central).
station(cl,central).
station(lg,central).
station(ls,central).
station(nh,central).
station(oc,central).
station(tc,central).
station(br,victoria).
station(fp,victoria).
station(kx,victoria).
station(oc,victoria).
station(vi,victoria).
station(ws,victoria).
station(ec,bakerloo).
station(em,bakerloo).
station(oc,bakerloo).
station(pa,bakerloo).
station(wa,bakerloo).
station(em,northern).
station(eu,northern).
station(ke,northern).
station(tc,northern).
station(ws,northern).
%adjecent stations %
% Central line
adjacent(nh,lg,central,4).
adjacent(lg,oc,central,4).
adjacent(oc,tc,central,4).
adjacent(tc,cl,central,4).
adjacent(cl,ls,central,4).
adjacent(ls,bg,central,4).
% Victoria Line
adjacent(br,vi,victoria,4).
adjacent(vi,oc,victoria,4).
adjacent(oc,ws,victoria,4).
adjacent(ws,kx,victoria,4).
adjacent(kx,fp,victoria,4).
% Northern Line
adjacent(ke,em,northern,4).
adjacent(em,tc,northern,4).
adjacent(tc,ws,northern,4).
adjacent(ws,eu,northern,4).
% Metropolitan Line
adjacent(al,ls,metropolitan,4).
adjacent(ls,kx,metropolitan,4).
adjacent(bs,fr,metropolitan,4).
% Bakerloo Line
adjacent(ec,em,bakerloo,4).
adjacent(em,oc,bakerloo,4).
adjacent(oc,pa,bakerloo,4).
adjacent(pa,wa,bakerloo,4).
нормально, у получить его сейчас больше, однако с station_numlines, используется, чтобы найти, сколько линий проходят через станции, и для этого требуется ввод одной станции, как бы я использовал ее для поиска только станций NonInterchange? как будет выглядеть тестовый пример? – Bart123
Я не уверен, что вы имеете в виду. Запрос 'non_interchange_station (Station)' должен перечислять все 'Station', которые не являются развязками. Тем не менее, я не могу проверить это без (некоторых) ваших фактов 'station/2'. –
Я имею в виду, что использование non_interchange_station (Station) позволяет мне проверять, является ли одна из станций, которые я вводил, true, но если бы я хотел протестировать все станции, перечисленные сразу ?. поэтому запрос должен выглядеть как non_interchange_station (br), и он возвращает true, что это станция без изменений. Если я просто использую non_interchange_station (Station), это дает мне ложный результат. Так как это можно сделать, чтобы я мог использовать предикат для отображения всех станций, которые не меняются? – Bart123