Whats the frequency of the letter а in:
Q: Visual Prolog: Перебор элементов нескольких списков Пишу программу составления кроссворда на Visual Prolog. Застряла на моменте получения всех возможных наборов элементов 4 листов. Все 4 списка разной длины. Необходимо получать набор из 4 элементов, по одному из каждого списка и в дальнейшем осуществлять необходимую мне проверку другим предикатом. Так нужно перебрать все комбинации этих листов. 
Например, имеем 3 списка и надо получить наборы по 3 эл-та:
    [1, 2, 3], [4, 5], [6, 7, 8]:
1, 4, 6;
1, 4, 7;
1, 4, 8;
1, 5, 6;
1, 5, 7;
1, 5, 8;
2, 4, 6;

и т.д.
Перебор элементов одного списка дело не трудное, но как сделать перебор по 4 спискам я не знаю. Может как-то с помощью встроенных предикатов list::?
Помогите пожалуйста. Может есть какие-то идеи?

A: Привожу решение на классическом Прологе с помощью предиката member/2(в Visual Prolog, насколько я знаю, есть метод isMember(), делающий то же самое).
    iterate_4(List1,List2,List3,List4,Goal) :-
        member(E1, List1),
        member(E2, List2),
        member(E3, List3),
        member(E4, List4),
        once(callN(Goal, E1, E2, E3, E4)),
        fail.

    iterate_4(_,_,_,_,_).

member/2 работает для случая 1й параметр-несвязанная переменная, 2й параметр- связанная переменная, (один из 4х списков), и имеет n решений, где n длина этого списка.
fail генерирует возврат и, таким образом, все member/2-цели начинают выдавать все решения из списков, начиная c member(Е4, List4), и, заканчивая member(Е1, List1).
Исчерпав все комбинации, Пролог переходит ко 2-му предложению и успешно завершает вычисления.
Цель once(callN(Goal, E1, E2, E3, E4)), этого просто Ваш код для обработки набора из 4х элементов для проверки другим предикатом.

user
There are seventy-eight "а"s in the text you provided.
assistant