Комментарии 29
Заметьте, что аргументы функции не разделены запятыми и не окружены скобками. (Это, наверное, самое сложное, к чему нужно привыкнуть, во время изучения Haskell.)
И это просто прекрасно. Код из-за этого читается легко и приятно.
И это просто прекрасно. Код из-за этого читается легко и приятно.
+1
АмнекажетсянаоборотэтоубиваетчитаемостькодаЭтокакеслибыпредложениявсегдабылизаписанысплошнякомбезпробеловипрочихзнаковпрепинанияРазделителидлятогоипридумаличтобыглазуивконечномсчетемозгубылолегчевыделятьинформациюизпотокаУверенвамстоилогораздоольшихтрудовчтобыпрочитатьэтопредложениечемеслибыонобылозаписанотак
Не открывать без прочтения вышеизложенного!
Я предупреждал
А мне кажется, наоборот, это убивает читаемость кода. Это как если бы предложения всегда были записаны сплошняком, без пробелов и прочих знаков препинания. Разделители для того и придумали, чтобы глазу (и в конечном счете, мозгу) было легче выделять информацию из потока. Уверен вам стоило гораздо больших трудов, чтобы прочитать это предложение, чем если бы оно было записано так: (кстати, в сплошном тексте грамматическая ошибка. Найдите ее за 10 секунд)
+1
((Ну) (мы же) (про) (скобки и запятые)), ((а не про) пробелы).
К *тому (гр, амм, ати, че, скую) [ошибку] [легко] #найдет $$компилятор.
К *тому (гр, амм, ати, че, скую) [ошибку] [легко] #найдет $$компилятор.
+1
Чем они принципиально отличаются? Или вы думаете, что читать книгу (текст на 10000 знаков, для определенности) без знаков препинания будет комфортно?
Что делать, если компилятора нет, а ошибку исправить надо?
К *тому (гр, амм, ати, че, скую) [ошибку] [легко] #найдет $$компилятор.
Что делать, если компилятора нет, а ошибку исправить надо?
0
Хаскел принципиально отличается тем, что я могу написать bind(), а могу >>. Условностей в синтаксисе минимум. Ну и отступы, которые обязательны, хорошо помогают читать короткие строки по 2-3 слова. Можно записать все в одну строчку, но я в реальной жизни таких уникумов не встречал. Практически все пишут простой и понятный код. Ну если монадами не злоупотреблять.
Сравните
main = putStrLn «hello»
и
def main():
print «Hello»
Во втором случае «бесполезных» символом куда как больше. А читаемость ниже.
Сравните
main = putStrLn «hello»
и
def main():
print «Hello»
Во втором случае «бесполезных» символом куда как больше. А читаемость ниже.
-1
Никто не говорит, что в Хаскеле нет знаков препинания.
Ими являются правильные отступы и… скобки.
Пробелы приводят лишь к тому, что использовать в названиях подчёркнутый_стиль крайне не рекомендуется, так как легко спутать с пробелом.
Ими являются правильные отступы и… скобки.
Пробелы приводят лишь к тому, что использовать в названиях подчёркнутый_стиль крайне не рекомендуется, так как легко спутать с пробелом.
0
Лично мне нравится аналогия с командной строкой, то есть когда синтаксис вызова функции соответствует принципу, по которому мы выполняем команды в cli. В таком представлении, скобки выполняют естественную роль границ выражения, а не служат в качестве специального символа-разделителя между именем функции и её аргументами. Сравните гипотетический cat, схожий с одноименной утилитой в Unix:
Очевидно, что в последнем примере скобки не несут никакой смысловой нагрузки, а являются специальными парными символами-разделителями, которые упрощают жизнь разве что только лексеру языка, но не программисту.
cat file1.txt file2.txt
cat "file1.txt" "file2.txt"
cat("file1.txt", "file2.txt")
Очевидно, что в последнем примере скобки не несут никакой смысловой нагрузки, а являются специальными парными символами-разделителями, которые упрощают жизнь разве что только лексеру языка, но не программисту.
+1
Теории тут много, но хорошо сказано про то, что такое моноиды!
0
А что такое вещи, большие чем множества?
0
Например, не может быть множества всех множеств и подобных, от этого возникают парадоксы. В то же время, категория всех категорий никаких парадоксов не создает, зато в нее явно входят все множества, плюс такие категории, объекты которых тоже не формируют множества. Так что, она «очевидно» больше, чем любое множество. В каком-то смысле.
0
В мире множеств есть лишь 3 мощности — конечное, счетное бесконечное и континуум. Сравнивать мощности множеств и категорий, на мой взгляд, не вполне корректно
0
Извините, я никак не могу понять про моноид. Если можете, объясните на конкретном примере, что именно является объектом, что — стрелкой.
Вот у нас есть категория одного объекта. Я правильно понимаю, что объект — это сам моноид, а стрелка — это все его отображения в себя?
Если все так, то какие есть отображения моноида в себя, кроме тривиального?
Вот у нас есть категория одного объекта. Я правильно понимаю, что объект — это сам моноид, а стрелка — это все его отображения в себя?
Если все так, то какие есть отображения моноида в себя, кроме тривиального?
0
Во-первых, не отображение моноида в себя. Теоретико-множественный моноид состоит из множества, фиксированного элемента этого множества и операции m: X -> X -> X. Так что, в себя отображается не моноид, а множество моноида.
Во-вторых, очень просто, если ваш моноид — целые числа, то для любого числа n функция
будет отображением множества моноида в себя (тут m = +).
Теоретико-категориальный моноид никуда не отображается, а имеет множество морфизмов, которое изоморфно множеству вышеупомянутых функций, которое, в свою очередь, изоморфно множеству теоретико-множественного моноида.
Во-вторых, очень просто, если ваш моноид — целые числа, то для любого числа n функция
f x = x + n
будет отображением множества моноида в себя (тут m = +).
Теоретико-категориальный моноид никуда не отображается, а имеет множество морфизмов, которое изоморфно множеству вышеупомянутых функций, которое, в свою очередь, изоморфно множеству теоретико-множественного моноида.
0
И нас, получается, не беспокоит, что отображение не «на», а «в», и что в частности может после такого отображения легко может пропасть ноль? Мы не пытаемся из нового множества снова сделать моноид?
«Теоретико-категорный морфизм имеет множество морфизмов». Морфизмов чего и во что? Я правильно это себе представляю, что объект — это множество моноида, а стрелка — это все его морфизмы. И объект плюс стрелка являются теоретико-категорным моноидом?
«Теоретико-категорный морфизм имеет множество морфизмов». Морфизмов чего и во что? Я правильно это себе представляю, что объект — это множество моноида, а стрелка — это все его морфизмы. И объект плюс стрелка являются теоретико-категорным моноидом?
0
Да не отображаем мы ничего никуда в ТК. Мы просто умеем компоновать морфизмы в новые морфизмы. А стрелка — это просто другое название морфизма. И не морфизм имеет морфизмы, а моноид. Вы невнимательно прочитали. А морфизмы из себя в себя. Автор же так и написал.
0
Ок. Т.е. нас вообще не волнует, что из себя представляет объект, что из себя представляют стрелочки, лишь бы компоновались?
0
Возможно, вам стоит почитать весь цикл с начала. Вот этот ваш комментарий — это, по сути, неформальное определение категории, которое было еще в первой статье, а вы так написали, как-будто удивились.
0
Тео́рия катего́рий — раздел математики, изучающий свойства отношений между математическими объектами, не зависящие от внутренней структуры объектов.
0
В конце статьи я немного поплыл в абстракциях. :-)
Надо будет еще раз внимательнее расставить точки над i.
P.S. Было бы неплохо в начале статьи (или отдельной статьей) предоставлять глоссарий терминов, которые вы же сами определяли. Мне в свое время очень помогало в освоении универовской программы. :-)
Надо будет еще раз внимательнее расставить точки над i.
P.S. Было бы неплохо в начале статьи (или отдельной статьей) предоставлять глоссарий терминов, которые вы же сами определяли. Мне в свое время очень помогало в освоении универовской программы. :-)
0
Самое главное, что удалось почерпнуть — это понимание того, каким образом математики занимаются рукоблудием ;)
А если серьезно, то то, что Haskell — это не средство приобщить программистов к математике, а приобщить математиков к программированию.
А если серьезно, то то, что Haskell — это не средство приобщить программистов к математике, а приобщить математиков к программированию.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Категории, большие и малые