Здравствуйте, deniok, Вы писали:
D>Опасные вопросы задаёшь D>Потому, что это k не произвольная функция, а штука с типом k :: a -> m b; каждому пижону известно, что это называется стрелка Клейсли:
Гугл показывает ресурсы с упоминанием теории категорий, видимо это и есть опасность
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, achmed, Вы писали:параметры стало понятно
A>>И в сигнатурах функций имен параметров тоже нет. A>>Вот яркий пример A>>
A>>callCC :: ((a -> m b) -> m a) -> m a
A>>
VE>А как вы предлагаете называть произвольный тип и монаду? VE>sourceType, targetType и anyMonad?
Имелись в виду не названия типов параметров, и не названия переменных типов параметров,
а имена параметров функций, которые можно увидеть только в определении функции.
Для чего служат эти параметры становится понятно после прочтения комментариев Cont, но определения этой функции нет в исходниках.
Здравствуйте, achmed, Вы писали:
A>Имелись в виду не названия типов параметров, и не названия переменных типов параметров, A>а имена параметров функций, которые можно увидеть только в определении функции.
По-моему если для хаскельной функции тебе необходимы имена параметров, то или у тебя неправильная декомпозиция на функции или она обозвана некорректно. В идеале должно быть достаточно имени и типов. А для некоторых — всего лишь типа.
A>Для чего служат эти параметры становится понятно после прочтения комментариев Cont, но определения этой функции нет в исходниках.
Т.е. ты жалуешься на то, что в типе сигнатуре не объясняется что такое продолжения и монады?
T>>И как ты предлагаешь назвать a, b, c и d? A>Нуу, можно x1:x2:x3:x4:xs или так не принято?
И в чём будет глубокий смысл, пардоньте? Ведь можно же и так: (highestBit:lowestBitFromTwoHghest:highestBitFromLowerPair:lowestBitOfTheNibble:xs. Так ведь ещё понятней будет.
T>>State monad не такая уж и сложная вещь после того, как разберёшься. A>Ага, но разбираться все таки проще с длинными именами было.
Возьми, да перепиши по своему. Это поспособствует пониманию. Я вполне серььёзно говорю, ведь тебе придётся выразить краткую запись во многих словах, таким образом, понять смысл и выразить по своему.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, thesz, Вы писали:
A>>Ага, но разбираться все таки проще с длинными именами было.
T>Возьми, да перепиши по своему. Это поспособствует пониманию. Я вполне серььёзно говорю, ведь тебе придётся выразить краткую запись во многих словах, таким образом, понять смысл и выразить по своему.
Переписал уже, причем только одна переменная с длинным именем получилась.
Я ожидал что есть какой то гайд, где расписаны рекомендации и мотивации к именованию переменных.
Здравствуйте, achmed, Вы писали:
A>Имелись в виду не названия типов параметров, и не названия переменных типов параметров, A>а имена параметров функций, которые можно увидеть только в определении функции.
С этим согласен, отсутствие имён в декларации иногда напрягает.
Заводить же
type NameOfFoo = String
type TypeOfFoo = String
type FooID = Int
foo :: NameOfFoo -> TypeOfFoo -> [FooID]
лишь для того, чтобы указать имя, как-то напряжно
Я бы предпочёл иметь возможность написать
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, achmed, Вы писали:
A>>Имелись в виду не названия типов параметров, и не названия переменных типов параметров, A>>а имена параметров функций, которые можно увидеть только в определении функции.
К>По-моему если для хаскельной функции тебе необходимы имена параметров, то или у тебя неправильная декомпозиция на функции или она обозвана некорректно. В идеале должно быть достаточно имени и типов.
Что такое CPS имел представление, о монадах кое какое представление имел. Как CPS использовать с монадами стало понятно только после прочтения комментариев.
К>А для некоторых — всего лишь типа.
Если бы этот прувер еще по названию мог функцию с нужным кодом строить
A>>Для чего служат эти параметры становится понятно после прочтения комментариев Cont, но определения этой функции нет в исходниках.
К>Т.е. ты жалуешься на то, что в типе сигнатуре не объясняется что такое продолжения и монады?
Видимо это привычка после мейнстримовых языков: где у каждого параметра есть имя, которое является самодокументируемым.
Хотя не совсем понятно какие были бы имена для callCC.
Здравствуйте, achmed, Вы писали:
A>Видимо это привычка после мейнстримовых языков: где у каждого параметра есть имя, которое является самодокументируемым. A>Хотя не совсем понятно какие были бы имена для callCC.
Наверное, тут и "порылась собака": хаскель способствует повышению абстракции до "жёстких" вещей из ТК, где уже сам тип функции является довольно описательной частью, а параметры до такой степени абстрактны, что именование их большой помощью читателю кода не является.
Но, с другой стороны, не только же из функторов и прочих моноидов состоят программы, поэтому в коде, более близком к прикладным вопросам решения задачи (если она сама по себе не из области аля ТК), имена параметров, скорее всего, имели бы смысл.
achmed wrote:
> MZ>(lambda (x y) (max x y)) > Пожалуй да, длинные имена в данном случае не уместны, > но буквы то все равно выбираются осознано . Вряд ли бы Вынаписали так: > > (lambda (a r) (max a r))
Да брось ты. Тут имена переменных могут быть вообще любыми.
Я часто ловлю себя на мысли (ну или ситуации), что слишком
долго думаю о имени переменной, и в итоге набираю
что-то типа
A>>>Ага, но разбираться все таки проще с длинными именами было. T>>Возьми, да перепиши по своему. Это поспособствует пониманию. Я вполне серььёзно говорю, ведь тебе придётся выразить краткую запись во многих словах, таким образом, понять смысл и выразить по своему.
A>Переписал уже, причем только одна переменная с длинным именем получилась.
A>Я ожидал что есть какой то гайд, где расписаны рекомендации и мотивации к именованию переменных.
Здравствуйте, achmed, Вы писали:
A>Угу, что означают буквы c, k?
Буквой К,k а иногда C,c часто обозначают continuation — функцию, которой передают результат вычисления. "K" в начале, это , я так понимаю из немецкого.
Здравствуйте, achmed, Вы писали:
A>Почему программируя на функциональных языках люди дают имена переменным из одной буквы? A>Символ " ' " часто используют, это производное значение?
потому что при коротком определении в 2-3 строчки этого вполне достаточно. твой же "расширенный" пример более понятен не из-за имён переменных, а из-за комментариев. попробуй без них..
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, achmed, Вы писали:
A>>Но ведь подчеркивание тоже можно, почему его не используют?
L>Потому что rock'n'roll круче, чем rock_n_roll.
Подозреваю, что одна из причин это ширина символа.
Здравствуйте, MigMit, Вы писали:
MM>Здравствуйте, achmed, Вы писали:
A>>Подозреваю, что одна из причин это ширина символа.
MM>У тебя в редакторе не моноширинный шрифт?