LINUX.ORG.RU

Cons как интерфейс

 


0

3

Ищу библиотеку, в которой cons является интерфейсом, на базе этого интерфейса построена библиотека стандартных функций работы со списками. Удобный ввод-вывод (сопоставимый по удобству со стандартным print/read). Но при этом реализацию cons-а я могу сделать сам.

В качестве альтернативы можно предложить любую подобную библиотеку, которая реализует некую абстракцию структуры данных, подобной консу, имеет развитые на этой основе библиотечные функции, красивый ввод-вывод и при этом позволяет подменить реализацию.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от monk

Это я посмотрел. Итог: не нашёл ничего подходящего - придётся делать и я по сути уже начал (заодно и локализация). То, что ты предлагаешь, во-первых, написал автор asdf, что уже плохой сигнал. Во-вторых, там сильно динамизм используется, а я хочу статическую типизацию и всякую оптимизацию.

Вот то, что я начал делать. В комментариях объяснено, почему всё это надо выкинуть и переделать. Но хорошо, что сделан уже подход к задаче. Штанга упала на ногу - ничего страшного.

https://bitbucket.org/budden/yar/src/c795c9f5e4da838d2fc736b0be12ac7453e5c118...

den73 ★★★★★
() автор топика

Как ты собрался делать все на основе одного cons'а? списки на нем должны тормозить нещадно. Нужно за основу брать что-то типа linked-list.

некую абстракцию структуры данных

cons — это не абстракция структуры данных, а функция, конструирующая структуру данных под названием точечная пара.

filequest
()
Ответ на: комментарий от filequest

cons — это не абстракция структуры данных, а функция, конструирующая структуру данных под названием точечная пара.

ты не поверишь, но «точечная пара» это абстракция структуры данных.

anonymous
()

Подозреваю, что твоим запросам не будет соответствовать, но можешь просто глянуть на мою generic-sequences. Навеяно Haskell. Есть на quicklisp.

У меня в ячейке cons хвост cdr представляет из себя не список, а функцию, которая должна вернуть список или nil. Функция эта сама по себе не мемоизируется, но это можно сделать, вызвав дополнительную функцию. Тогда вернется поток.

Получилось что-то среднее между теми приемами, что я видел. У меня ближе к итератору .NET, чем к спискам.

Иногда думаю, что, может быть, стоило сразу мемоизировать cdr так, как это описано в PAIP, когда речь там идет о pipes. Тогда было бы совсем близко к clojure и Haskell, и списки бы мемоизировались, превращаясь в потоки.

Но уже не помню, что меня остановило. Может быть, потенциальные проблемы с многопоточностью? Баланс между скоростью и функциональностью?

dave ★★★★★
()
Ответ на: комментарий от dave

Собственно, идея «cons как интерфейса» заключается у меня в том, что ты делегируешь вычисление хвоста списка некоторой произвольной функции. В этом и вся суть абстракции.

dave ★★★★★
()
Ответ на: комментарий от dave

Извини, болею, нет сил посмотреть даже. Только хвоста делегируешь? А голову нет? А читабельная печать есть? Она должна отличаться от обычного конса, но всё же быть удобной, как конс. Квадратные скобки или что-нибудь такое же подобное.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Сама структура тоже оборачивается в функцию. Так структура становится ленивой, а ее вычисление отложенным. У меня есть небольшая дока в PDF на инглише. Можно из каталога quicklisp вытащить после установки по-моему.

С печатью будут сложности. Для итератора не может быть печати.

dave ★★★★★
()
Ответ на: комментарий от den73

Несколько развилась библиотечка.

https://bitbucket.org/budden/yar/src/default/fb2/kons/kons.asd?at=default&amp...

Сделал как бы второй, независимый тип (класс) kons:cons, не пересекающийся с cl:cons. Реализован ввод-вывод. На печати он выглядит как

{ a b c } 
; или 
{ a b . c }
В SBCL есть «полиморфные sequence» и они тоже реализованы. Т.е. можно написать
(map 'list 'identity { 1 2 3 } )

Многое ещё не доделано (и не всё будет когда-либо доделано), но если кому интересно - пользуйтесь. Нет, она не в quicklisp и да, она тянет кучу моих библиотек, которые тоже не в quicklisp.

Работает только под SBCL.

den73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.