2015-09-17 3 views
1

Я новичок в Gerrit и Prolog, и мне трудно создать мое правило. С помощью rules.pl, который у меня есть, он останавливается, когда я пытаюсь открыть окно Gerrit после запуска команды push.Gerrit Prolog Rule - Требовать определенный тип файла

Я хотел бы сделать правило, что при каждом нажатии на удаленный компьютер должен присутствовать файл .txt в списке измененных файлов. Я видел подобное правило в поваренной книге Prolog, но мое еще не совсем правильно. Вот то, что я в настоящее время (внесли некоторые изменения в последнем 24 часов):

submit_rule(S) :- 
      gerrit:default_submit(X), 
      X = .. [submit | Ls], 
      my_rule(Ls,R), 
      S = .. [submit | R]. 

    my_rule(S1,T) :- 
      gerrit:commit_delta('\\.txt$), 
      T = label('Text-File-Must-Be-Present',ok(T)). 

    my_rule(S1,[label('Text-File-Must-Be-Present',need(_)) | S1]). 

Я думаю, что я до сих пор не хватает что-то в my_rule. Я должен быть уверен, что commit_delta вернулась. Если нет, тогда он должен вернуть false и заблокировать нажатие на дистанционное репо. Нужно ли мне нечто подобное?

gerrit:commit_delta('\\.txt$), 
    T \= false, !, 
    T = label('Text-File-Must-Be-Present',ok(T)). 

для возврата в случае, если возвращается ложное сообщение? Еще раз спасибо!

ответ

2

Не знает Геррит, но у вас есть несколько проблем синтаксиса, может быть, индуцированные некоторого шаг обработки текста багги:

gerrit:commit_delta('\\.txt$), 

покинул атом несогласованным, скрывая последующую ошибку (по крайней мере, в Prologs не поддерживающую SWI -Prolog расширения соединений с 0 арностью)

T = label('Text-File-Must-Be-Present',need()). 

need() должны иметь по крайней мере 1 аргумент, или должен быть записан в виде need.

Если Геррит реализует свой собственный интерпретатор Пролога, он должен быть в состоянии показать, где отчет об ошибке ...

Кстати, первое правило является более сложным, чем это необходимо. Я хотел бы написать

submit_rule(submit(R)) :- 
    gerrit:default_submit(R,submit(Ls)), 
    my_rule(R). 

ясно показывая, вы забываете обрабатывать Ls

+0

Спасибо за ваши комментарии. Я обновил оригинальный пост с некоторыми изменениями, которые предложил знакомый Пролог. Однако я не понимаю ваш первый комментарий. Разве запятая не говорит, чтобы продолжить проверку? – tennis

+0

нет, запятая - разделитель аргументов - оператор «и» (при использовании в предикате) - разделитель элементов списка. Я не могу вспомнить другое использование ... – CapelliC

Смежные вопросы