Size: a a a

Kotlin Community

2021 January 08

IP

Iaroslav Postovalov in Kotlin Community
но в котлине/джавы они не приняты, в отличие от хаскеля/лиспа
источник

L

LevT in Kotlin Community
Denis Kalinochkin
tail это естественная операция только для односвязных списков, в котлине они обычно не такие
Я-то не наезжаю, интересуюсь фактами.
Но спасибо за подробности и мотивы
источник

DK

Denis Kalinochkin in Kotlin Community
Iaroslav Postovalov
но в котлине/джавы они не приняты, в отличие от хаскеля/лиспа
Для ArrayList это неэффективно и бессмысленно
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Postovalov
нет, в принципе для любых связанных списков
А как легко отцепить хвост от двусвязного?
источник

IP

Iaroslav Postovalov in Kotlin Community
Vladimir Petrakovich
А как легко отцепить хвост от двусвязного?
держать и хвост, и бошку
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Postovalov
держать и хвост, и бошку
Ну держим, и что дальше?
источник

AL

Alexander Levin in Kotlin Community
LevT
Я-то не наезжаю, интересуюсь фактами.
Но спасибо за подробности и мотивы
Ну всмысле вы можете написать drop(1), просто в плане перфоманса будет не очень то, что ожидалось бы от tail.
источник

IP

Iaroslav Postovalov in Kotlin Community
Vladimir Petrakovich
А как легко отцепить хвост от двусвязного?
openjdk'шный линкед лист

public class LinkedList<E>
   extends AbstractSequentialList<E>
   implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
   transient int size = 0;

   /**
    * Pointer to first node.
    * Invariant: (first == null && last == null) ||
    *            (first.prev == null && first.item != null)
    */
   transient Node<E> first;

   /**
    * Pointer to last node.
    * Invariant: (first == null && last == null) ||
    *            (last.next == null && last.item != null)
    */
   transient Node<E> last;last.next == null && last.item != null)
    */
   transient Node<E> last;
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Postovalov
openjdk'шный линкед лист

public class LinkedList<E>
   extends AbstractSequentialList<E>
   implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
   transient int size = 0;

   /**
    * Pointer to first node.
    * Invariant: (first == null && last == null) ||
    *            (first.prev == null && first.item != null)
    */
   transient Node<E> first;

   /**
    * Pointer to last node.
    * Invariant: (first == null && last == null) ||
    *            (last.next == null && last.item != null)
    */
   transient Node<E> last;last.next == null && last.item != null)
    */
   transient Node<E> last;
Я всё ещё не понимаю, как это помогает без копирования получить хвост.
Собственно в этом самом LinkedList subList() даже не переопределён.
источник

IP

Iaroslav Postovalov in Kotlin Community
Vladimir Petrakovich
Я всё ещё не понимаю, как это помогает без копирования получить хвост.
Собственно в этом самом LinkedList subList() даже не переопределён.
ну, башка - это первый связанный элемент, при связывании нового объекта записывать его в хвост?
источник

IP

Iaroslav Postovalov in Kotlin Community
либо я туплю, что возможно
источник

DK

Denis Kalinochkin in Kotlin Community
Iaroslav Postovalov
ну, башка - это первый связанный элемент, при связывании нового объекта записывать его в хвост?
Это сломает инвариант
источник

IP

Iaroslav Postovalov in Kotlin Community
Denis Kalinochkin
Это сломает инвариант
а, значит все-таки туплю
источник

L

LevT in Kotlin Community
Alexander Levin
Ну всмысле вы можете написать drop(1), просто в плане перфоманса будет не очень то, что ожидалось бы от tail.
Example 2.1.5.4    
In a  given sequence  
2.1.5.4    
In a  given sequence  pi , count  how many  times  pi (i)   >  pi(i +1)   occurs.
Hint:  use zip  and tail.

Вот такого рода проблемы натуральнее решаются с таким девайсом как tail

А перформанс... ну давайте вообще линкдлист запретим наравне с "одобрением наркотиков", указом роскомпозора.
источник

AL

Alexander Levin in Kotlin Community
LevT
Example 2.1.5.4    
In a  given sequence  
2.1.5.4    
In a  given sequence  pi , count  how many  times  pi (i)   >  pi(i +1)   occurs.
Hint:  use zip  and tail.

Вот такого рода проблемы натуральнее решаются с таким девайсом как tail

А перформанс... ну давайте вообще линкдлист запретим наравне с "одобрением наркотиков", указом роскомпозора.
Я только про то, что drop(1) будет за линейное время работы, а tail за константное обычно.

А насчёт этой задачи - есть zipWithNext :)
источник

L

LevT in Kotlin Community
Alexander Levin
Я только про то, что drop(1) будет за линейное время работы, а tail за константное обычно.

А насчёт этой задачи - есть zipWithNext :)
Ну, это один из многочисленных котлиновских шорткатов. Дико мне интересных (т.ч. спасибо!),
но всё же вторичных по сравнению с идиоматическим ФП

Шорткаты конечно покрывают многое, но всё ж не всё, иногда вместо tail придётся саблистами ворочать, или вот хелпер добавлять
источник

DK

Denis Kalinochkin in Kotlin Community
LevT
Ну, это один из многочисленных котлиновских шорткатов. Дико мне интересных (т.ч. спасибо!),
но всё же вторичных по сравнению с идиоматическим ФП

Шорткаты конечно покрывают многое, но всё ж не всё, иногда вместо tail придётся саблистами ворочать, или вот хелпер добавлять
Если тебе надо идиоматичное фп, котлин, возможно, не для тебя
источник

L

LevT in Kotlin Community
Denis Kalinochkin
Если тебе надо идиоматичное фп, котлин, возможно, не для тебя
Мне надо обоя: и идиоматиное ФП, и идиоматичный котлин. )
источник

DK

Denis Kalinochkin in Kotlin Community
LevT
Мне надо обоя: и идиоматиное ФП, и идиоматичный котлин. )
Они иногда расходятся
источник

L

LevT in Kotlin Community
Denis Kalinochkin
Они иногда расходятся
Тем интересней мне, к чему именно они каждое притягиваются в этих точках расхождения.
источник