LINUX.ORG.RU

scheme/lisp

 , ,


3

5

Коллеги, добрый день.
Когда-то давно, ещё в универе, был предмет ФЛП, примеры и практика были на чём-то похожем на scheme/lisp или около этого.
Хочу освежить воспоминания и попрактиковать на пет-проектах.
Поэтому прошу подсказать базу и последующие книги в этом направление.
п.с. авось кому этот тред и в будущем пригодится.
Спасибо!

★★★★★
Ответ на: комментарий от anonymous

правда, наворотили с кодировками (которые например, только ASCII) и с пулом строк массивом байт и сохраняемом в tangle для weave.

но в целом, для однозадачного мейнфреймистого доса – довольно наглядно и понятно:

  • это такой навороченный препроцессор для структурного объяснения, структурного программирования — почти как cpp из сишки, только со странностями:

** по смыслосодержательным именам блоков кода возможно сокращ... – а не по именам файлов, которые ни о чём не говорят

** #define – есть, @d. но нетути: #include (но есть \input в plain tex ) и полноценных #if EXPR1 defined ..#else#endif. впрочем, менее полноценных #ifdef .. #ifndef .. #endifтоже нет.

** ## = @& склейка токенов препроцессора

в этом смысле, @d debug(...) и @d gubed(...) в tangle.web – это такие алголистые комментарии, но костыли по сути (а уже на тех же cpp препроцессорных можно было бы сделать и сборку вариантами)

  • один файл, один выхлоп. тоже в один файл, или паскалевский или теховский.

  • change-файл с патчами – тоже один.

в этом смысле:

Дональд Кнут изобрёл в виде WEB: tangle,weave лично для себя – более приятный препроцессор.

  • по смыслу и именам блоков кода, (возможно, сокращ...) , а не по имени файлов.

  • с ручным контролем каждого символа, который получится в выхлопе (паскалевском, и/или, теховском тоже) – через цитирование или вставку в восьмеричной или 16-чной кодировке.

  • с ASCII таблицами в целом, намудрили – например, режет >= 128 в кириллических однобайтных кодировках.

опять же, если туда пихать utf8 – возможно, нужны отдельные кодировки в файле, и отдельные – в памяти (примерно как в plan9 и в inferno – руны для wchar только в памяти, и перекодировывать как в convcs в/из восьмибитных в руны)

  • с пулом строк, в целом, тоже намудрили – зато у тебя есть индексы, глоссарии и ссылки в оглавлении.

  • с однофайловостью, и в целом, с однозадачностью, однопоточностью – тоже упрощённо. поэтому тот же тех иногда приходится перезапускать несколько раз.

  • и возможно, с REPL интерактивностью для plain tex и ошибками где можно исправить (или тупо смотреть на мигающий курсор, и бибикать, пытаясь из vim-а выйти :)) – тоже.

  • с переносимостью по терминалам и файловым вводом выводом немного тоже (основная причина патча, довольно маленького что в tex-fpc что в tex-gpc относительно texbook изначального).

но в целом: понятно, почему он такой.

потому что это продукт этой эпохи, однозадачной досовой (в смысле ДОС360 и JCL) пакетной обработки.

в этом смысле, WEB это почти как cpp только более смыслосодержательный .

а некоторые части cpp не реализованы в WEB потому что уже есть в plain tex.

с другой стороны: можно было бы и ещё раз расширять сам метаязык контрольных кодов WEB.

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

а вот ещё, казалось бы: почему бы те же самые weave/tangle не написать на каком-нибудь TXR Lisp специально для текстов; или вот, на обычном нормальном лиспе.

ведь написали же на лиспе TeXinfo Scribe/Skribe/scribble/Skribillo/Exscribe, вот это вот всё как метапроговские презентации в Racket slides.

так почему бы и сам tex, и сопутствующие ему: tangle, weave и не писать метациклически на самом себе чтобы через всё – на каком-нибудь лиспе.

с другой стороны, вот решётки порядка блоков кода топологической сортировки частично упорядоченные по. или: односторонние ссылки типизированные тоже как решётка порядка, + в lattice тайптегов.

то есть: выкинув из препроцессора WEB Тьюринг-полноту – например, макросов: запретив @d внутри @p что фактически запрещяет macros, (re)writing macros — получили решётки порядка.

а раз решётки порядка частично упорядоченные частичным порядком – то применимо продвижение констант из оптимизатора конпеляторов.

то есть: гипертекст невозбранно становится конпелируемым. а не интерпретируемым.

то есть: WEB это не просто какой-то там жалкий недоделанный препроцессор со строками или огрызками токенов.

это почти полноценный компилятор, паратекста памяти переводов блоков кода: потенциально.

только – маленький ещё. ему вырасти не дают, ибо Тьюринг-полнота, FEXRPы и FSUBRы и downwards funarg problem, вот это вот всё.

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

а Object Talk из соседнего треда – я наконец понял, зачем придумали.

чтобы невозбранно достигнув желаемого – написать на нём метапрог

так-то там и ноды с датафлоу диагармами, копулируют между собой.

и ECS и диагармер и ImGui какой-то есть.

и – конпелируемые подфункции.

правда, на конпелируемом JavaScript. а надо бы – на лиспе православном.

и далее: рисовать в диагармах какой-то Drakon-Editor или SWITCH-технологию на нодах с датафлоу.

и – конпелировать в исподники.

Диагармы, слово-то какое. Словно два песца пятилапых, Гарм и северный песец. и – полный им Рагнарёк.

anonymous
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария