All streams
Search
Write a publication
Pull to refresh
29
0
Артем Присяжнюк @temaHT

User

Send message
Ну вот на вскидку:
— Яндекс метрика работает только с сайтами на которые ходят реальные посетители. Вебсервис или API с помощью метрики проверить нельзя;
— Метрика работает только с http, мы http, ping, traceroute, mysql, smtp, pop3, mssql и т.д.
— В яндекс метрике нет эскалации алертов;
— Нельзя настроить точный интревал мониторинга;
— Нет распределенной проверки;
— Насколько я знаю, в метрике нельзя поделится своим аптаймом со своими клиентами/пользователями.
На первый взгляд, этот сервис нацелен на совершенно другой сегмент, и решает абсолютно другие задачи.
Знакомые делают подобную штуку, называется Tutorle. Но там скорее как комбинацию онлайн-сервиса и мобильных/десктопных приложений. Сейчас есть веб-интерфейс, и WinPhone приложение. На подходе вроде Android, iOS и Windows 8.
Можно заводить сколько угодно словарей и добавлять свои слова. Есть возможность проиграть произношение слов. Несколько видов тестов. Одна из фишек — все созданные словари и статистику обучения можно сбрасывать в облако и потом синхронизировать на любом другом устройстве.
Коллега, функция чистые во всех приведенных случаях. Извините, но я б на вашем месте, все таки еще раз прошелся по теории и закрепил бы ее на практике, перед тем как не к месту вставлять «вумные» цитаты, уж простите.
Спасибо. Про асинки будет во второй части. Там есть некоторые нюансы, хотя принцип тотже.
Про деревья, немного выше есть ответ с сылкой на континуацию и катаморфизм. Они как раз и преднозначены чтобы работать с графами,/деревьями без стека, на хвостовой рекурсии.

А в чем проблема с reverse?
let rec reverse acc lst =
  match lst with
  | [] -> acc
  | hd :: tl -> reverse (hd :: acc) tl


Если у нас уже есть foldl и reverse
let foldl f lst =  List.fold f (List.rev lst)

Примитивы, да реализованы. Но это ведь только списки или последовательности. А что делать с деревьями, графами?
Кстати reverse, зря вы обидели, да и foldr тоже наверно.
Ок убедили. Но Давайте конкретику: 1) приведите строки из примеров в которых по вашему мнению пообочный эффект; 2) как их по вашему эти проблемные места следует переписать?
>> Но тут сразу код жуткий.

Ключевая фраза.

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

Чудес, к сожалению не бывает. Но зато после достаточно долго курения катаморфизма, часто наступает просветление.
Я в курсе, я лет пять на окамле сидел. Но это меня не сильно напрягало, но к опциональным параметрам, привязался… :-)
Гм… Простите а где Вы тут видите пообочные эффекты?
В функциональном подходе это делается с помощью континьюэйшенов и катоморфизма.

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

Была еще небольшая статья на Хабре на эту тему.
Если в одном предложении — то темлейты это система макросов работающая во время компиляции, а генерики это полноценные классы с поддержкой рантайма. Как сказал Один известный дядя:

Anders Hejlsberg: To me the best way to understand the distinction between C# generics and C++ templates is this: C# generics are really just like classes, except they have a type parameter. C++ templates are really just like macros, except they look like classes.

Ну и более Подробно.
Не сыпте соль на рану. К сожалению в таком виде как в камле, опциональных параметров в F# нету.
Нет.

Starting with Microsoft in 1998, Don also created Generics in C# and in the .NET Common Language Runtime. He has been a functional programmer since 1989.

Don Syme — автор F#

Насчет дотнета соглашусь. Ибо в дотнете, во первых, исключение — это исключение. А во вторых механизм исключений довольно тормознутый. Но есть языки где исключения, один из механизмов control flow.
К примеру, OCaml (папа F#) — там исключения рассматривается как нормальная практика построения логики. Не могу сказать что мне такой подход по душе, но тем не менее.
Ну так это C#, в котором, насколько я помню, как раз компилятор ничего не знает про хвостовую рекурсию. Поэтому и память жрется, и глубина вложенности ограничена.
Не секрет, используем здесь.

Чем удобней? А вы не задумывались откуда в C# генерики, лямбды, LINQ?

Будем первыми :-). Но на самоом деле все хорошо с коммерческим ииспользованием. Так на вскидку — 2008 год. Сейчас если погуглить, то можно найти массу примеров.
Как то так:
let sumTailRec acc i =
        if i <= 0L then acc
        else sumTailRec (acc + i) (i - 1L) 

Вызов:
> sumTailRec 0L i

Нюанс такой, что в таком более кратком варианте, у функции появляется дополнительный параметр — аккумулятор. В данном случае, это даже полезно, ибо мы можем пробрасывать начальное значение. Но очень часто, аккумулятор нет смысла показывать наружу, поэтому организуется внутренний цикл — функция loop, которая работает с аккумулятором.
Кроме того когда в функции более 5-ти строк, то эффект не такой драматический, как в данном случае когда размер кода увеличился почти на 100% :-)
Планшета, наверно нет, вы уже все что можно разобрали.
А вот ноутбуки вы не разбираете?

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity