понедельник, 18 февраля 2013 г.

Языковое

Я так не люблю телевизор, что новый год встречал в окружении мороженного и scala. Ну как встречал, о чем-то (понятно о чем) задумался, поднял голову - там уже 0:10. Президентов я не слушаю, они не могут сказать ничего нового. Да и не на чем.

Таки уже первого числа сходил к родителям. Получил дозу облучения телевизором (где-то 14-16 микроРентгенЧас), поел, подарил web-камеру и ушел как Винни Пух с фразой "ну, раз больше ничего нет..."

Очевидно, что пост не про это. И даже не про ЭТО.

В праздники таки добил bloxorz - эта такая пошаговая полу-логическая игра. http://www.coolmath-games.com/0-bloxorz/index.html , вот тут можно попробовать. С Димой непонятно зачем прошли вручную за вечер. Недели за полторы я смог вбить все уровни и сделал это в автоматическом режиме. Несколько непонятен смысл автоматизации, когда вручную можно сделать за день, а автоматизируешь в десять раз дольше. Удовольствие в самом процессе, а смысла нет.

Результат можно посмотреть тут https://github.com/ajtkulov/bloxorz_scala , если у вас стоит scala + sbt, то можно забрать исходники, в корне запустить sbt и набрать там test.

Это отнаследованная вещь от заданий с coursera. Все что без комментариев, очевидно, мое.

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

Отлаживать уровни - это местами ад. Во всех случаях в итоге где-то косячишь на +-1 по координатам, отловить такое нетривиально. Косяков с кодом практически не было. В одном месте забыл переопределить hashCode. Еще оказалось, что ++ для стримов лучше не писать, а .append() эффективнее. На маленьких данных все работает, а чуть дальше памяти не станет хватать.

В каждой из функциональщин есть джентельменский набор вопросов, которые необходимо знать. Как клеятся списки - это пожалуй один из первых вопросов. В пятерке также входит не использование foldr с бесконечными ленивыми объектами (это вам не foldl).

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

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

Система сборки sbt довольно радует. Очевидно, вы пишете простые скрипты на scala, при том все типизированно. Конечно, уже сильно привык к тому же Resharper, что позволяет просто вертеть проекты в 20+Мб исходников. Писать в emacs десяток Кб нетрадиционщину для меня уже (или пока?) напряжно.

Прохожу еще на coursera курс, там был месяц ML, сейчас Racket (оно же Scheme). ML приятен на вкус. Довольно прост и местами абстрактен. Папа многих, Хиндли-Милнер ногами растет от туда. Если не про ML, то я щупал около 4..6 диалектов скобочек, мелочи есть, я их ощущаю. Scheme && Racket немного рафинированы, и немного урезаны с практической точки зрения. А так, скобочки как скобочки. Мне нравится. Отсутствие статической типизации и лексический scope как-то напрягает, но если закрыть глаза... то практически не тошнит.

В общем, детский восторг на детском уровне. 

Комментариев нет: