Почему говорится, что мой предикат block / 3 не вызывается? - PullRequest
1 голос
/ 19 января 2020

Итак, я изучал Пролог, и чтобы проверить себя, я хотел решить одну загадку. Я думаю, что я довольно близко к решению этого, но я, кажется, делаю что-то не так. Кажется, мой предикат block/3 не вызывается.

возможно, это ошибка синтаксиса, или я делаю что-то, что не работает в Прологе. Я не вижу этого.

predicate not called

block/3 должен дать все возможные комбинации наборов в block/2.

Я не уверен если это полностью актуально, но я включу цель головоломки:

Есть четыре куба с различной комбинацией четырех изображений на их лицах. (Kim, Lab, Hail и Com)
Цель состоит в том, чтобы выровнять кубы таким образом, чтобы при их объединении все стороны рядом друг с другом были одинаковыми. Так что вокруг каждого куба проходят четыре одинаковые строки, а затем две стороны, которые также должны совпадать.

Я написал программу, чтобы просто решить строки и не обращая внимания на ориентацию изображения и две стороны. Если это дает более одного ответа, это не должно давать слишком много для попытки вручную.

в любом случае, каким-то образом solve(X) полностью игнорирует мой предикат block/3. Я давно смотрю на это и не могу найти проблему.

1 Ответ

2 голосов
/ 19 января 2020
 member( block(1, _, Row), X )

эквивалентно

 E = block(1, _, Row), member( E, X )

, поэтому фактически он не вызывает block/3 в качестве предиката, он просто использует его как составной термин, символически.

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