LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Плюс, так как это Джава, то нельзя использовать рекурсию, все приходится переделывать в итеративную версию)

У тебя Scheme без Tail-call optimization? А как тогда циклы делаешь?

Так вот, действительно ли сейчас реализовывают списки через кучу связанных Cons cells?

Как правило, да. Так как в базовой платформе редко есть готовые списки. Ну и специальные случаи должны правильно отрабатываться.

Есть ли какой-нибудь красивый и простой способ остаться на стандартных джавовских коллекциях, реализовать и список, и cons-ячейку, да еще и сделать, чтобы список был реализован непосредственно через cons'ы, либо наследовал от них?

Да. Просто делаешь списковые операции на коллекциях Java:

Cons(Item, LinkedList) -> LinkedList;
Cons(Item, Item) -> Pair
Car(LinkedList l) = l.first
Cdr(LinkedList l) = ... как в Java получить список со второго элемента?

Исходная версия monk, :

Плюс, так как это Джава, то нельзя использовать рекурсию, все приходится переделывать в итеративную версию)

У тебя Scheme без Tail-call optimization? А как тогда циклы делаешь?

Так вот, действительно ли сейчас реализовывают списки через кучу связанных Cons cells?

Как правило, да. Так как в базовой платформе редко есть готовые списки. Ну и специальные случаи должны правильно отрабатываться.

Есть ли какой-нибудь красивый и простой способ остаться на стандартных джавовских коллекциях, реализовать и список, и cons-ячейку, да еще и сделать, чтобы список был реализован непосредственно через cons'ы, либо наследовал от них?

Да. Просто делаешь списковые операции на коллекциях Java:

Cons(Item, LinkedList) -> LinkedList; Cons(Item, Item) -> Pair Car(LinkedList l) = l.first Cdr(LinkedList l) = ... как в Java получить список со второго элемента?