Если у кого есть возможность, дайте на ФИДО, буду очень признателен.
eda.public собака gmail.com
Ну и если вдруг совершенно случайно у кого-то завалялся… от демоноида тоже не откажусь ))
спасибо!
ну подобных вариантов море, никто спорит :)
к слову, отличие reduce от fold лично меня немного смущает. только то, что в reduce тип аккумулятора должен совпадать с типом элемента коллекции?
Да что-то я не думаю, что многим понравится.
— Нельзя ли как-нибудь убрать побочные эффекты из Printer? (Пусть возвращает строку, которую затем можно будет вывести куда угодно.)
— Она ровно это и делает — функция sprintf — это и есть «печать в строку», так что функция Printer имеет тип Expr -> string :)
характеристикой это назвать сложно, скорее (насколько я успел заметить) некоторая негласная договоренность программистов. Максимально полно именуются только верхнеуровневые функции. Может быть это подсознательная мысль: «ФП-код должен быть коротким» покоя не дает? :)
Переменные в лямбдах вообще обычно одним или двумя символами обозначают. Ну собственно, так же как и for (int i = 0… )
если необходимо что-то удалять, то лучше использовать Filter с предикатом. Он для этого предназначен. Тем более не очень представляю, как вы реализуете удаление в лямбде? Через замыкание? Не есть гуд, имхо.
я вот и подумал, что надо хоть как-то попытаться разрушить витающую над ним ауру «любопытной безделушки». не самый яркий пример наверно, но уж какой под руку подвернулся.
ну поскольку я в этом проекте менеджер (так что облажался с планированием тоже вроде как я =)) ), то в общем мне и флаг был в руки. К тому же компания у нас небольшая и новые технологии внедряет с удовольствием (как тот же WPF). в этом конечно прелесть работы в маленькой фирме :)
да, все вопросы видимости-невидимости остались за пределами, и так уже многовато вышло ) Как-нибудь в другой раз.
на самом деле все таким образом определенные идентификаторы (что функции, что значения) можно видеть из другой сборки, установив референс.
Можно определить module или namespace в файле, но если они не определены, то считается, что имя файла = имя модуля.
1. я этого не говорил. внутри класса можно обращаться как хочется:
type Sample = class
new () = {}
member x.A i = x.B i
member x.B i = x.A i
end
а к самому классу можно обращаться только ниже, как в пределах файла, так и в пределах проекта (порядок файлов имеет значение) Из другого проекта — пожалуйста, реф поставить и вперед.
2. Ну чем меньше возможностей, тем меньше проблем, как бы. :) Но вообще я думаю вряд ли возможно увести это неверное значение дальше чем на один шаг.
1. Не знаю, когда такая способность может пригодиться, но если очень нужно, тогда можно сделать методами класса — с ними все как обычно.
2. Ну почему черт знает что — другую функцию. Ну в конце концов, вы же ее тоже где-то будете использовать? Там и получите вашу ошибку, о том, что пытаетесь подставить значение неверного типа (ну например требуется int, а вы ставите int -> int). Ну честно говоря не разу еще в такую ситуацию не попадал.
3. Чем-то да отличаются ) Списки имеют тип, который я выше показал, их можно легко разбирать pattern matching'ом, массивы являются изменяемым типом, их элементы можно изменять по отдельности. Последовательности — это просто здешний мем для IEnumerable, то есть ею может быть все что угодно. А еще они могут быть бесконечными =)
eda.public собака gmail.com
Ну и если вдруг совершенно случайно у кого-то завалялся… от демоноида тоже не откажусь ))
спасибо!
что ж, чудеса в нашем мире случаются нечасто :)
к слову, отличие reduce от fold лично меня немного смущает. только то, что в reduce тип аккумулятора должен совпадать с типом элемента коллекции?
сложная система, жаль что хабр не openID =)
вообще h, t — это обычно head и tail, r, l — right и left
— Нельзя ли как-нибудь убрать побочные эффекты из Printer? (Пусть возвращает строку, которую затем можно будет вывести куда угодно.)
— Она ровно это и делает — функция sprintf — это и есть «печать в строку», так что функция Printer имеет тип Expr -> string :)
Переменные в лямбдах вообще обычно одним или двумя символами обозначают. Ну собственно, так же как и for (int i = 0… )
на самом деле все таким образом определенные идентификаторы (что функции, что значения) можно видеть из другой сборки, установив референс.
Можно определить module или namespace в файле, но если они не определены, то считается, что имя файла = имя модуля.
type Sample = class
new () = {}
member x.A i = x.B i
member x.B i = x.A i
end
а к самому классу можно обращаться только ниже, как в пределах файла, так и в пределах проекта (порядок файлов имеет значение) Из другого проекта — пожалуйста, реф поставить и вперед.
2. Ну чем меньше возможностей, тем меньше проблем, как бы. :) Но вообще я думаю вряд ли возможно увести это неверное значение дальше чем на один шаг.
2. Ну почему черт знает что — другую функцию. Ну в конце концов, вы же ее тоже где-то будете использовать? Там и получите вашу ошибку, о том, что пытаетесь подставить значение неверного типа (ну например требуется int, а вы ставите int -> int). Ну честно говоря не разу еще в такую ситуацию не попадал.
3. Чем-то да отличаются ) Списки имеют тип, который я выше показал, их можно легко разбирать pattern matching'ом, массивы являются изменяемым типом, их элементы можно изменять по отдельности. Последовательности — это просто здешний мем для IEnumerable, то есть ею может быть все что угодно. А еще они могут быть бесконечными =)