Две недели назад поставил Антивирус Касперского. Не смотря на его эффективность, жутко тормозит систему. Через неделю его снес=)
Недавно вышел Microsoft Security Essentials. Сегодня поставил. Эффективность оценить еще не сумел, но зато не тормозит систему, что не может не радовать=)
Недавно вышел Microsoft Security Essentials. Сегодня поставил. Эффективность оценить еще не сумел, но зато не тормозит систему, что не может не радовать=)
Нашел довольно интересный электронный журнал по функциональному программированию:fprog.ru =) Можно на досуге почитать=)
- Mood:
good
Установил Windows 7. Работает быстрее, чем Vista. Красивое оформление=)
Так же порадовал PowerShell. В-общем, мне пока всё нравится=)
Так же порадовал PowerShell. В-общем, мне пока всё нравится=)
- Mood:
good
В этой заметки мы рассмотрим некоторое введение в F#. А именно: объявление функций, условный оператор и "безымянные" функции (lambda - аналог в языке Lisp).
Объявление функции производится с помощью оператора let. Общая запись оператора let следующая:
let FunctionName x1 x2 .... xN =
instruction1
.................
instructionM
;;
FunctionName - имя функции, причем если две функции имеют одно название в одной области видимости программы, то при компиляции(интерпретации) будет ошибка
x1 x2 .... xN - параметры функции
instruction1
................. - набор инструкций, выполняемых функцией .
instructionM
Некоторые примеры:
let y = 5; - константная функция, которая не имеет входных параметров, а только возвращает константу 5 (тип константы int)
let y = 5.0; - константная функция, которая не имеет входных параметров, а только возвращает константу 5 (тип константы float)
let quatre x =
x*x; - возведение в квадрат;
let usefunc f x y =
f (x+y); - применение функции f к сумме x и y, так например, usefunc quatre 2 3;; вернет константу 25.
Если функция рекурсивная, то после let ставится rec.
Условный оператор.
Общая запись выглядит следующим образом:
if (условие) then
instruction1
................. - набор инструкций.
instructionM
else
instructionM+1
................. - набор инструкций.
instructionM+N
;;
Ну и последнее, это "безымянные" функции. Общий вид имеют следующий:
function (x1 ... xN) -> набор инструкций
или
fun (x1 ... xN) -> набор инструкций
Отличие между этими двумя записями только в том, что вторая более компактна. Приведем пример использования этих функций:
let quatre2 x = (fun y-> y*y) x;; - функция возведения в квадрат. Причем функция quatre2 возвращает значение которое посчитала "безымянная" функция (fun y-> y*y).
В дальнейшем, будет рассмотрен более детально каждый из представленных механизмов.
Объявление функции производится с помощью оператора let. Общая запись оператора let следующая:
let FunctionName x1 x2 .... xN =
instruction1
.................
instructionM
;;
FunctionName - имя функции, причем если две функции имеют одно название в одной области видимости программы, то при компиляции(интерпретации) будет ошибка
x1 x2 .... xN - параметры функции
instruction1
................. - набор инструкций, выполняемых функцией .
instructionM
Некоторые примеры:
let y = 5; - константная функция, которая не имеет входных параметров, а только возвращает константу 5 (тип константы int)
let y = 5.0; - константная функция, которая не имеет входных параметров, а только возвращает константу 5 (тип константы float)
let quatre x =
x*x; - возведение в квадрат;
let usefunc f x y =
f (x+y); - применение функции f к сумме x и y, так например, usefunc quatre 2 3;; вернет константу 25.
Если функция рекурсивная, то после let ставится rec.
Условный оператор.
Общая запись выглядит следующим образом:
if (условие) then
instruction1
................. - набор инструкций.
instructionM
else
instructionM+1
................. - набор инструкций.
instructionM+N
;;
Ну и последнее, это "безымянные" функции. Общий вид имеют следующий:
function (x1 ... xN) -> набор инструкций
или
fun (x1 ... xN) -> набор инструкций
Отличие между этими двумя записями только в том, что вторая более компактна. Приведем пример использования этих функций:
let quatre2 x = (fun y-> y*y) x;; - функция возведения в квадрат. Причем функция quatre2 возвращает значение которое посчитала "безымянная" функция (fun y-> y*y).
В дальнейшем, будет рассмотрен более детально каждый из представленных механизмов.
- Mood:+-
В-общем,несколько странная заметка. По-простому разговор пойдет о миниюбках, а точнее о логических противоречиях, которые у меня возникают при общении с людьми, носящими их=)

А именно, в большинстве случаев, когда спрашиваешь зачем надета мини-юбка, то получаешь два наиболее распространенных ответа:
1. Удобный тип одежды.
2. Красиво (этот пункт (и следствия из него) обсуждать не будем, на вкус и цвет, так сказать).
Поговорим о первом пункте. У меня начинают возникать в этом пункте сомнения, после некоторых закономерностей:
1. Носитель мини-юбки всегда пропускает тебя вперед по лестнице.
2. В транспорте, если носитель мини-юбки сидит, то чаще всего прикрывается либо пакетом, либо папкой, либо сумочкой.
3. Злится, что все обращают внимание на него(то есть на носителя)
4. Злится, что люди противоположенного пола "пристают".
5. И тд.
Единственное удобство - это хорошая конвекция потоков воздуха. Но думаю, юбка "до колен" обеспечивает не намного хуже конвекцию. Так что думаю, что о удобности мини-юбки можно поспорить. Ну основное, что хочется сказать, не говорите, что вы одели мини-юбку только потому, что это удобно, это несколько недоправда, как мне кажется....
P.S. Надеюсь я не обидел носителей мини-юбок
P.P.S. Я не знаю о чем в итоге эта заметка, так же я не знаю как она относится к учебе, информатике или к чему то полезному=)

А именно, в большинстве случаев, когда спрашиваешь зачем надета мини-юбка, то получаешь два наиболее распространенных ответа:
1. Удобный тип одежды.
2. Красиво (этот пункт (и следствия из него) обсуждать не будем, на вкус и цвет, так сказать).
Поговорим о первом пункте. У меня начинают возникать в этом пункте сомнения, после некоторых закономерностей:
1. Носитель мини-юбки всегда пропускает тебя вперед по лестнице.
2. В транспорте, если носитель мини-юбки сидит, то чаще всего прикрывается либо пакетом, либо папкой, либо сумочкой.
3. Злится, что все обращают внимание на него(то есть на носителя)
4. Злится, что люди противоположенного пола "пристают".
5. И тд.
Единственное удобство - это хорошая конвекция потоков воздуха. Но думаю, юбка "до колен" обеспечивает не намного хуже конвекцию. Так что думаю, что о удобности мини-юбки можно поспорить. Ну основное, что хочется сказать, не говорите, что вы одели мини-юбку только потому, что это удобно, это несколько недоправда, как мне кажется....
P.S. Надеюсь я не обидел носителей мини-юбок
P.P.S. Я не знаю о чем в итоге эта заметка, так же я не знаю как она относится к учебе, информатике или к чему то полезному=)
- Mood:+-
Вот и завтра 1 сентября....
Итоги за лето: половина книги foundation of F#, и ознакомился с QT. Так больше никаких результатов особых.
По-видимому год будет тяжелый...
Итоги за лето: половина книги foundation of F#, и ознакомился с QT. Так больше никаких результатов особых.
По-видимому год будет тяжелый...
Заметка не будет очень большой. Сегодня с другом ходили пешком до метро Строгино (приблизительно 8 -10 км). На ногах грузики, каждый грузик по 1,5 кг... и идет маленький моросящий дождь....
Так вот. Во время пути встретился участок (1,5 км приблизительно) дороги (если это можно назвать дорогой уже), где из-за дождя дорога превратилась в месиво из грязи...
В итоге я вывел несколько правил хождения по грязи:
1. Если идете по грязи, идите там, где еще растет трава.
2. Если идете по грязи, идите там, где есть камни большие или малые, без разницы.
В-общем даже если оказался в ситуации, что приходится идти по грязи, то ищите всевозможные подобия "фундамента". Ну и последнее правило, которое вывел:
3. Старайтесь выбирать чистую дорогу! (а если полез в грязь, не надевай 3 кг на ноги...)
Мораль: если влип по уши в грязь, не сдавайся! :)
Так вот. Во время пути встретился участок (1,5 км приблизительно) дороги (если это можно назвать дорогой уже), где из-за дождя дорога превратилась в месиво из грязи...
В итоге я вывел несколько правил хождения по грязи:
1. Если идете по грязи, идите там, где еще растет трава.
2. Если идете по грязи, идите там, где есть камни большие или малые, без разницы.
В-общем даже если оказался в ситуации, что приходится идти по грязи, то ищите всевозможные подобия "фундамента". Ну и последнее правило, которое вывел:
3. Старайтесь выбирать чистую дорогу! (а если полез в грязь, не надевай 3 кг на ноги...)
Мораль: если влип по уши в грязь, не сдавайся! :)
- Location:Дома
- Mood:Хм....
В-общем здесь!)
Всем доброго времени суток!
17 апреля 2009 года в МАИ будет проводится день информационных
технологий!
Темы дня:
- SilverLight 3.0
- Windows 7
- F#
- Robotics Studio
Будет мероприятие проходить в 101 аудитории 5 корпуса! Приглашаются
все желающие.
И конечно же, будут разыгрываться призы!
17 апреля 2009 года в МАИ будет проводится день информационных
технологий!
Темы дня:
- SilverLight 3.0
- Windows 7
- F#
- Robotics Studio
Будет мероприятие проходить в 101 аудитории 5 корпуса! Приглашаются
все желающие.
И конечно же, будут разыгрываться призы!

Если в кратце говорить о том, в чем уникальность функционального программирования, то можно сказать, что все объекты, с которыми программист работает - это функции.
Сейчас я поступлю по принципу "лень - двигатель прогресса" и советую почитать следущие определения: функция, функциональное программирование.
Потому как фактическое описание прочитали выше, теперь приступим к "интуитивному" описанию функционального программирования. Так вот, первый вопрос возникает, когда начинаешь учиться функциональному программированию - "как же можно обходится без переменных?". Ответ, на самом деле, очень простой. Надо использовать функции вместо переменных! (не правда ли гениальный ответ, для функционального программирования?!:)) Просто мы объявляем константную функцию (например: x = 1; x = 5; y = 8....). Сразу после этого возникает вопрос а как же нам изменять эти функции. Понятно, что написав (х = х + 1) - это бред для функционального программирования. Т.к. функциональное программирование в принципе можно грубо назвать, как "математика в коде", то уравнение вида (х = х + 1) не имеет решения в математике. А как тогда быть? Ответ тоже довольно прост, достаточно взять другую функцию (у = х + 1), и уже работать с ней в дальнейшем.
Сейчас я поступлю по принципу "лень - двигатель прогресса" и советую почитать следущие определения: функция, функциональное программирование.
Потому как фактическое описание прочитали выше, теперь приступим к "интуитивному" описанию функционального программирования. Так вот, первый вопрос возникает, когда начинаешь учиться функциональному программированию - "как же можно обходится без переменных?". Ответ, на самом деле, очень простой. Надо использовать функции вместо переменных! (не правда ли гениальный ответ, для функционального программирования?!:)) Просто мы объявляем константную функцию (например: x = 1; x = 5; y = 8....). Сразу после этого возникает вопрос а как же нам изменять эти функции. Понятно, что написав (х = х + 1) - это бред для функционального программирования. Т.к. функциональное программирование в принципе можно грубо назвать, как "математика в коде", то уравнение вида (х = х + 1) не имеет решения в математике. А как тогда быть? Ответ тоже довольно прост, достаточно взять другую функцию (у = х + 1), и уже работать с ней в дальнейшем.
Сейчас и в дальнейшем стоит запомнить одно правило, всё есть функция!
Так же такого понятия как цикл в принципе в функциональном программирование нет, что опять же в этом случае делать? Ответ опять же банален, просто достаточно воспользоваться рекурсией. Причем просто одна функция рекурсивно вызывает сама себя какое то количество раз, запишем это на "псевдокоде":
РекурсивныйFor( ФункцияСчетчик; ФункцияДоЧегоСчитать; .....)
{тело функции}
if (ФункцияСчетчик<=ФункцияДоЧегоСчитать)
РекурсивныйFor( ФункцияСчетчик+1; ФункцияДоЧегоСчитать; .....)
{тело функции}
Где на самом деле как говорилось ранее ФункцияСчетчик+1 - уже новая функция. Через рекурсию возможно решить любой итерационный алгоритм. Можно возразить и сказать, что рекурсия есть "дорогой" инструмент, т.к. зачастую считаются одни и теже значения по нескольку раз или функция вызывает себя несколько раз за время своей жизни. Да, действительно, если строить решение "в лоб", то программа будет "кушать" очень много ресурсов. Но если подольше чуть-чуть подумать над задачей, то для многих задач рекурсию можно свести к однохвостовой рекурсии. А так же не стоит пренебрегать таким инструментом, как динамическое программирование.
В - общем, с "интуитивным" уровнем мы и закончили. Единственно, что можно еще сказать для обобщения представления о функциональном программировании, что так как в функцию подается в качестве аргументов функции, то можно легко создавать совершенно "гениальные и уникальные" композиции функций, которые позволяют решить задачу намного эффективнее. Данная парадигма применима и в "императивных" языках программирования.
Эта парадигма позволяет при большей затрате времени на обдумывание решения задачи, затратить меньше ресурсов при выполнение задачи(конечно не во всех случаях, но в большинстве). В дальнейших заметках будут конкретные решения на конкретном языке программирования (F#).
Так же такого понятия как цикл в принципе в функциональном программирование нет, что опять же в этом случае делать? Ответ опять же банален, просто достаточно воспользоваться рекурсией. Причем просто одна функция рекурсивно вызывает сама себя какое то количество раз, запишем это на "псевдокоде":
РекурсивныйFor( ФункцияСчетчик; ФункцияДоЧегоСчитать; .....)
{тело функции}
if (ФункцияСчетчик<=ФункцияДоЧегоСчитать)
РекурсивныйFor( ФункцияСчетчик+1; ФункцияДоЧегоСчитать; .....)
{тело функции}
Где на самом деле как говорилось ранее ФункцияСчетчик+1 - уже новая функция. Через рекурсию возможно решить любой итерационный алгоритм. Можно возразить и сказать, что рекурсия есть "дорогой" инструмент, т.к. зачастую считаются одни и теже значения по нескольку раз или функция вызывает себя несколько раз за время своей жизни. Да, действительно, если строить решение "в лоб", то программа будет "кушать" очень много ресурсов. Но если подольше чуть-чуть подумать над задачей, то для многих задач рекурсию можно свести к однохвостовой рекурсии. А так же не стоит пренебрегать таким инструментом, как динамическое программирование.
В - общем, с "интуитивным" уровнем мы и закончили. Единственно, что можно еще сказать для обобщения представления о функциональном программировании, что так как в функцию подается в качестве аргументов функции, то можно легко создавать совершенно "гениальные и уникальные" композиции функций, которые позволяют решить задачу намного эффективнее. Данная парадигма применима и в "императивных" языках программирования.
Эта парадигма позволяет при большей затрате времени на обдумывание решения задачи, затратить меньше ресурсов при выполнение задачи(конечно не во всех случаях, но в большинстве). В дальнейших заметках будут конкретные решения на конкретном языке программирования (F#).
Спасибо за то, что дочитали до конца заметку! =)
- Mood:
happy
