Как я могу аккуратно распечатать график с событиями? - PullRequest
1 голос
/ 10 ноября 2010

Наше задание - отображать временную шкалу событий в Прологе. Наша база данных выглядит примерно так:

event(e1, 20).  
event(e2, before(e1)).  
event(e3, before(e2)).  
event(e4, 15).  
event(e5, before(5)).  
event(e6, 30).  
event(e7, before(e2)). 

Наша идея состоит в том, чтобы определить 2 точки (0 и ноль) как фиксированные значения и представить временные шкалы следующим образом:

0   5   15  20  30          nil  
\ x x e4    e1  e6  /  
\ e5/             
\ x e3  e2      /     
\ x e7  /

(Извините, я не знаю, как здесь работают вкладки, и я не могу опубликовать скриншот)

Наша идея состоит в том, чтобы найти все возможные пути от 0 до нуля и попытаться выяснить, какие узлы можно объединить.

Пути будут выглядеть примерно так:

[  
[0, e4, e1, e6, nil],  
[0, e5, e4, e1, e6, nil],  
[0, e3, e2, e1, e6, nil],  
[0, e7, e2, e1, e6, nil]  
]

Как мы можем найти события в правильном порядке? Кажется, мы не можем продвинуться вперед от 0, потому что, чтобы найти первое событие, вы должны убедиться, что оно перед каким-то другим событием или чем-то еще?

1 Ответ

0 голосов
/ 11 ноября 2010

Временные интервалы кратны 5? Подразумевает before (), что событие размещается в следующем временном интервале? Есть ли событие только один факт факт? Тогда вы можете попробовать что-то вроде следующего.

Определить предикат eff_time_slot (Событие, Время). Будет быть рекурсивно определено следующим образом:

   eff_time_slot(Event,Time) :- event(Event,Expr), eval_time_expr(Expr,Time).

   eval_time_expr(Num,Num) :- number(Num), !.
   eval_time_expr(before(Expr),Num) :- !, eval_time_expr(Expr,Help), Num is Help+5.
   eval_time_expr(Event,Num) :- eff_time_slot(Event,Num).

Если событие может иметь несколько фактов о событии, то вам необходимо изменить предикат eff_time_slot, это может сделать findall и возьмите максимум из eval_time_expr.

Для ускорения вы можете использовать табулирование eff_time_slot. Целый Выше работает, пока зависимости событий формируют группу доступности базы данных.

Bye

(с) 2010, Ян Бурс, 8004 Цюрих

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...