Search
Write a publication
Pull to refresh
47
0
Мурат Касимов @iokasimov

Инженер

Send message

Нет, не разумеется. Изучать что-то можно как от общего к частному, так и от частного к общему. От туториалов обычно ожидается второе. Но с вашими туториалами это не работает.

Мне кажется, что ваши ожидания - это наверное всё таки ваши проблемы.

Возможно вы правы и я глуповат. А возможно вы слишком сложно объясняете простые вещи.

Дело не в глупости, а в знакомстве с определенными концепциями. Если вам это не интересно - это ваше дело, не понимаю, зачем вы мне ставите в упрёк то, чего вы не знаете и не собираетесь узнавать. Я использую для объяснений те концепции, который используется в самом языке, минуя промежуточные абстракции (которые всё равно потом отбросятся, когда вы попробуете понять фундамент).

монада - это просто моноид в категории эндофункторов, чего тут непонятного

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

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

Многие знают что такое Optional или Maybe. Уверен, гораздо меньше кто догадается что такое Halts, не прочитав его определение.

Ну наверное надо прочитать определение. Документация не полная, я не всё описал. Если чего-то нет в документации, можно заглянуть в код - это вполне нормальный процесс в программировании.

Кстати, в описании hv опечатка, должно быть [V]oid, а не [V]nit.

Спасибо, сейчас исправлю.

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

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

Так все операторы в Я так же можно произнести, ведь они состоят из букв латинского алфавита. Тут всё описано: https://muratkasimov.art/Ya/Operators

Судя по вашей логике, то таким людям и читать текст некомфортно. Я пока не знаю примеров языков программирования, оторванных от текста.

"Кодама". Я его так назвал, так как я не создавал этот шрифт с нуля, я взял Mononoki, изменил некоторые базовые символы и добавил автоматическую генерацию композитных лигатур. Мне это напоминило мультфильм "Принцесса Мононоке", там были такие создания, их звали Кодама и они своими телами похожи на операторы в Я. Вот тут его можно скачать.

Там где есть сложный порядок выполнения. Компиляторы, утилиты, агенты - навскидку. Использовать в вебе как и Haskell (на мой взгляд) смысла особого нет.

Да с этим даже дети справляются

Вопрос не в том, кто с этим справляется, а в том, что control flow может быть достаточно сложен и один из лучших способов сделать его легче - это декларативность. А вот запускать интерпретатор в своей голове, пытаясь разобраться что происходит с такими jmp - может и оперативной памяти не хватить.

Я не совсем понимаю, к чему эти конкретные примеры - как это вообще к это теме этой статьи относится?

Даже взрослые еле справляются со сложными control flow. Я лишь предлагаю свой подход к решению этой проблемы. Он может вам не нравится, но это ваше дело и вы можете критиковать его, просто хотелось бы больше конструктивности.

У меня не получается объяснить, что операторы в Я не надо гуглить - их надо читать. Они состоят из логографических токенов и объясняют, что они делают. Нет нужды к каждому инфиксному оператору добавлять синоним (bind, traverse), только для того, чтобы его запоминать. Вот тут всё объясняется, как это работает: https://muratkasimov.art/Ya/Operators

Я и не подозревал, что всё на самом деле так просто! Ни ветвлений, ни условий, ни прыжков в другие участки кода. Просто инструкции, одна за другой...

https://ru.wikipedia.org/wiki/Порядок_выполнения

P.S. Посмотрел ваши туториалы. По ним понять решительно ничего невозможно.

Разумеется, туториалы - это следующий шаг после знакомства с самим языком. Вроде никто обычно не жалуется, что не может понять код на языке, которого он не знает. Это нормально. У вас просто не получится с наскока со всем разобраться, минуя фундамент.

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

  2. Всё так, можно либо объяснять код, используя слова из предметной области либо самими операторами. В самом Haskell вроде как у <*> нет своего названия, но ничего - люди как-то пользуются.

  3. Нотация там несложная, нужно просто прочитать страничку с операторами и всё станет на свои места. Но как я уже и говорил ранее, это нормально, что человек, не знающий языка не может его прочитать. Если под читаемостью подразумевается именно С-подобный синтаксис - тогда я могу понять.

  4. Можно либо выделить уже отрендереный символ и вставить его в поисковой ввод, либо просто нажать Backspace и глянуть из каких символов он состоит.

В смысле, ещё сложнее использовать чем Haskell?

Я не могу сказать, что использовать Haskell сложно. Для меня это один из самых лёгких языков программирования с ясной семантикой и предсказуемым поведением. Под "отодвиганием компромиса" имеется ввиду обобщение базовых конструкций в стандартном Haskell.

Если вы знакомы с функцией zoom из библиотеки lens - то в Я это контравариантный функтор из категории атрибутов (аналог линз) в категорию стрелок (функций) по первому параметру в State. И вместо функции zoom (которое является словом и имеет свои ассоциации), я могу использовать оператор ha (Hom-функтор, contrAvariant). Если этот абзац показался вам сложным, то мне правда нечего вам предложить и этот язык не для вас. Но если вас вдруг заинтересовало, то я могу помочь разобрать и другие аспекты этого языка.

по индексу например

Мне кажется, вы прочитали только первое предложение в абзаце, речь идёт не об индексах.

Спасибо, исправлено.
Это работает со значениями, не с типами.
Нет, это не валидный синтаксис. Путаете со значениями, с типами это не работает.
Композиция контрвариантных функторов тоже ковариантна. Удобно запомнить: позитивная позиция — (+), негативная — (-). Минус и минус дают плюс.
Это не валидный синтаксис.
Я использовал Haskell и его индуктивное определение списка, которое исключает двусвязность.

Видимо, есть большая путаница. Вот тут, к примеру, определение односвязного списка приравнено к спискам: freecontent.manning.com/wp-content/uploads/2015/05/arrays-vs-lists.pdf

В нескольких статьях на Хабре встречал описание рядом односвязного списка и стека и недоумевал, почему существуют два названия для одного и того же.
Нет, в курсе/литературе, посвященной структурам данных есть четкое определение того, чем является список. Реализация в конкретных языках программирования не делает его абстрактным.
В ссылке с другими решениями есть вариант с scanl1/scanr1.
Список — это линейная структура данных, если вы хотите прочитать конец списка, вам нужно пройти его до конца за линейное время. Элементы массива можно читать за O(1).
Моей ошибкой было считать, что получить весь объем воды было не возможным без информации об объеме воды на каждую стенку.
1

Information

Rating
Does not participate
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity