169 похожих чатов

Вот я часто видел примеры с связаным списком, длина которого

определена на уровне типов, так что можно всякие прикольные штуки доказывать, но я никогда не видел, чтобы создавался массив (не связанный список) и на уровне типов какие-то штучки гарантировались. Так вот вопрос, даже два:
1) Можно ли сделать самому (с нуля) на голом Haskell тип массив, в котором доступ к элементам был за O(1) (а не O(n) как в списке)
2) Можно ли к такому массиву прикрутить длину на уровне типов?

13 ответов

21 просмотр

Можно

1) реализовать массив чуть ниже голого Хаскеля можно (primitive) и чуть выше можно (vector), просто на Хаскеле нельзя 2) да, конечно, не вижу, какие тут могут быть препятствия

Cheese Syrowiecki
1) реализовать массив чуть ниже голого Хаскеля мож...

1) Haskell Report 2010 требует, чтобы все имплементации включали в себя Data.Array, https://www.haskell.org/onlinereport/haskell2010/haskellch14.html#x22-20100014

Bodigrim🇺🇦
1) Haskell Report 2010 требует, чтобы все имплемен...

технически, не обещает доступа за O(1), это может быть дерево

Max Силинг
технически, не обещает доступа за O(1), это может ...

в теоретической «другой имплементации хаскелля»

Max Силинг
технически, не обещает доступа за O(1), это может ...

дерево тоже может быть O(1), но не всегда, конечно

Max Силинг
не понимаю, как?

на практике у вас не может более 2^64 узлов (а на самом деле сильно меньше), значит, у двоичного дерева высота ограничена сверху константой 64

Cheese Syrowiecki
на практике у вас не может более 2^64 узлов (а на ...

ну кам он. на практике в связном списке не может быть больше 2^64 узлов, поэтому его длина ограничена сверху константой 2^64.

Max Силинг
ну кам он. на практике в связном списке не может б...

нет, 64 гораздо меньше, а если 4-битные маски использовать, то вообще 3-4 хопа в худшем случае. такой константой можно пренебречь. 2^64 нельзя пренебречь

Cheese Syrowiecki
нет, 64 гораздо меньше, а если 4-битные маски испо...

да, log(N) это очень хорошо. поэтому и можно сказать rapid.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта