Пролог, начиная со списков - PullRequest
0 голосов
/ 22 апреля 2011

Я только изучаю пролог и хочу начать с основной проблемы, чтобы я мог, по крайней мере, знать общую конструкцию остальных ..

например.

patt(true,l) - всегда работает и уходит l

patt(next(char),l) - работает, если char является первым и оставляет остаток от l

предикатный патт: сопоставляет части списка и оставляет оставшуюся часть или завершается ошибкой. l = список

также, что такое SWI-Prolog и приличная IDE для Windows ... Я только что скачал его и, кажется, довольно просто ... Я также схватил BProlog и заглянул в пару других ..

1 Ответ

1 голос
/ 22 апреля 2011

Было бы неплохо получить более ясную формулировку проблемы: трудно сказать по вашему вопросу, но мне кажется, что вы хотите сопоставить префикс списка и вернуть все элементы, которые не являются частью префикса.Вот как я могу это сделать:

match_prefix( []     , []     , []     ).
match_prefix( []     , [Y|Ys] , [Y|Ys] ).
match_prefix( [H|Xs] , [H|Ys] , Tail   ) :-
  match_prefix( Xs , Ys , Tail ).
  • , если 1-й аргумент (требуемый префикс) является пустым списком, а 2-й аргумент (список, который нужно проверить на префикс) является пустымlist, тогда 3-й аргумент (хвост без префикса проверяемых списков) является пустым списком.
  • В противном случае ... если 1-й аргумент является пустым списком, но второй аргумент не является- пустой список, мы исчерпали желаемый префикс, поэтому мы объединяем третий аргумент (результат) со вторым аргументом (список).
  • В противном случае ... если первые 2 аргумента не пустысписки и их головы объединяются, мы снимаем головы и зацикливаемся на хвостах.

Это должно было бы сделать это (но я не могу сказать, что проверил это, так как я неВ настоящее время есть пролог, с которым можно играть).

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