Получение всех комбинаций элементов в списке (Пролог) - PullRequest
0 голосов
/ 16 ноября 2018

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

%

descartes([],[],false).

descartes(X,Result,IsExist):-
i_think(X,Result),
i_exists(X,Result,IsExist).

%should concatenate all combinations of input list
i_think([],NULL).

i_think([X|Xs],S):-
Y = Xs,
Y1 = X,
concatenate([X,Y1],Z1),
i_think(Y,T),
i_think(Xs,U),
S = [Z1,T,U].

%
concatenate([X,Y],R):-
 atomics_to_string([X,Y],T),
 atomics_to_string([Y,X],U),
R= [T,U].
%
i_exists(X,Y,false):-
len(X,Y,2);
len(X,Y,1).
i_exists(X,Y,true):-
len(X,Y,0).
%
len(X,Y,Count) :-
   length(X,K),

   length(Y,I),
    (
        (
            K < I,
            Count is 0
        );
        (
            I < K,
            Count is 2
        );
        (
            I = K,
            Count is 1
        )
    ).

Основная проблема с i_think / 2, спасибо за любую помощь. .... Конечно, укажите ввод / вывод и спасибо за ответ:

descartes/3 : 
descartes(['gold','bank'],Result,isExist)
Result=['goldgold','goldbank','bankbank','bankgold']
isExist= true
(In fact I would prefer to erase repetitions as...)
descartes(['gold','gold'],Result,isExist)
Result=['goldgold','goldgold','goldgold','goldgold'] 
(this shouldn't be generated as i_exist would return true)
isExist= false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...