пятница, 27 августа 2010 г.

Циклы на F#

Сейчас попытался реализовать довольно тривиальный цикл, который на C++ выглядел бы следующим образом:

while(true)
{
    string buf = "";
    cout << "write string(Y/N): ";
    cin >> buf;
    if(buf == "Y") return true;
    if(buf == "N") return false;
}

довольно тривиальная весчь, заставляющая ввести либо Y, либо N.
но вот на F# возникли некоторые проблемы(предположительно из-за того, что ключевое слово return можно не использовать и юзался #light)

т.е. написать в лоб:

while true do
  printf "write string(Y/N): "
  let Sol = Console.ReadLine()
  if Sol = "Y" then true
  if Sol = "N" then false

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

в итоге это было решено следующим образом(в ФП стиле кстати, в императивном стиле я решения не нашёл удовлетворительного(два match и лишняя переменная не в счёт)):

type ... =
  ...
  member x.entr = 
        printfn "Enter your solution(Y/N): "
        match Console.ReadLine() with
            | "Y" -> true
            | "N" -> false
            | _ -> x.entr
  ...
  interface ... with
    member x.roll (flag : bool, data : IRollData) = 
            intrf.print data.DataList
            if flag = true then x.entr
            else false

хотя не думаю, что это лучший выход... скорее всего я как-то не так понял работу цикла while-do

четверг, 26 августа 2010 г.

Тест отображение кода

type test = 
    { A : int; B : int}
    member this.copyB dB = { this with B = this.B + dB}

ну вот, теперь я знаю, что для корректного отображения кода программ нужно использовать тег pre:)

значит скоро буду постить примеры кода на F#, раз уж я им занялся)

среда, 18 августа 2010 г.

F#, первое знакомство

F# - это функциональный язык разработанный в M$ под платформу .Net, близкий родственник Haskell.

Первые ощущения от языка - странно.
Оч. похоже на Haskell и Python на первый взгляд. Сразу бросается в глаза использование отступов для различения блоков кода, но это есть гуд кстати(есть и в питоне и в хаскеле).
Потом... функцию main можно определить следующим образом:
let main ( _ ) =
    ...
ну или более стандартно(если аргументы имеют для нас значение):
let main ( args : string[] ) =
    ...

_ - явное использование паттерн матчинга(ура, классная весч), в хаскеле оч. часто ей пользуешься)
= - опять аналогия с хаскель...

это всё хорошо, мне нравится...
но вот много строчные комментарии вида (* много\nтысч\nбукаф *) убивают... хочется стандартных, для C#, /* **/ с автопереносом и автодобавлением звёздочек...

а да, чуть не забыл... вместо привычного main, как точки входа в программу, можно использовать к примеру MaIInbl...
ибо дело в том, что точка входа опр. с помощью добавления перед функцией [%EntryPoint%]*
, которая будет точкой входа.

*вместо [% следует ставить [<, а вместо %] - >]

Обида забывает боль

Я, продолжавший путь, когда за мной вдогонку,
Эскорты чёрных рыб пускались из глубин,
И загонял июль в пылавшую воронку
Ультрамарин небес ударами дубин...


Артюр Рембо
 

среда, 11 августа 2010 г.

Нян-нян:)

CodePlex, Mercurial и переезды...

ммм... с чего бы начать... начала то особо и нету))

Пожалуй следует начать с того, что я доделал первый вариант кода для объединения динамических систем и залил его на гиториус(http://gitorious.org/fds/association_of_dynamical_systems).

Там вроде как бы всё более менее работает... но вот получилось всё достаточно криво по нескольким причинам:

  • Я плохо представлял себе структуру, которую в итоге должен построить, да и вообще с трудом представлял себе, как это всё должно выглядеть с точки зрения программирования.
  • Я плохо знал C# (я и сейчас не особо то его знаю) и его возможности. Сейчас с этим чуточку получше.
В общем говоря начало переписывания этого кода для получения вменяемой библиотеки классов и интерфейсов было делом времени. Ну и я решил начать потихоньку.

А так как я стал периодически получать от гугла ссылки на Open Source проекты выложенные на CodePlex, то было решено использовать в этот раз именно его.
Немаловажным фактором тут играет и то, что для Mercurial(который юзается на CodePlex) существует плагин VisualHG для TortoiseHG интегрирующийся в VS.

Так что теперь мой код по ДС публикуется тут(лицензия LGPL, ибо не жадный я:).

среда, 4 августа 2010 г.

jQuery пример ajax запроса

$.ajax({
type: "GET",
url: hoverText,
cache: true,
success: function(data){
item = $(".posttdMessage:last", data);
$("#textpanel").html(item.html());
$("#textpanel").slideToggle("slow");
}
});
 вот такой вот небольшой код загрузит страничку по адресу хранящемуся в hoverText,
найдёт последний элемент с классом posttdMessage
и засунет html код этого элемента в элемент с id textpanel на нашей странице:)

всё довольно просто))