Как заметил @Kaarel, вырожденная форма двоичного дерева, которое вы получаете, когда узлы вставляются в последовательность, представляет собой связанный список:
Запись списка Пролога простосинтаксический сахар для нормального термина пролога: ./2
, где 1-й аргумент является главой списка, а 2-й - хвостом списка.Символом пустого списка является атом «[]».Итак, внутреннее представление списка типа [1,2,3]
- это структура / термин
.( 1 , .( 2 , .( 3 , '[]' )
Список из одного элемента, [1]
как
.( 1 , '[]' )
И пустой список какatom '[]'
.
Вы можете увидеть привлекательность синтаксического сахара.
См. http://cs.union.edu/~striegnk/learn-prolog-now/html/node78.html для более подробной информации.
Учитывая эту идентичность, что-то вродеэто даст вам то, что в оригинальном сообщении говорится, что вы хотите:
list2tree( [X,Y] , tree(X,Y) )
.
list2tree( [X|Xs] , tree( X , Ts ) :-
list2tree( Xs , Ts )
.
Хотя все, что вы делаете, это смена функтора.Тем не менее, ваша структура, кажется, не допускает пустого списка / дереваКак вы собираетесь представлять это?