<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5219626453078054207</id><updated>2012-05-20T23:14:26.536-07:00</updated><category term='icq'/><category term='Visual Studio'/><category term='мысли'/><category term='.Net'/><category term='Clojure'/><category term='картинки'/><category term='ООП'/><category term='размышления'/><category term='C++'/><category term='репозитории'/><category term='крик души'/><category term='PowerShell'/><category term='css'/><category term='fsharp'/><category term='рассуждения'/><category term='динамические системы'/><category term='fsi'/><category term='vim'/><category term='код'/><category term='циклы F#'/><category term='хак'/><category term='class F#'/><category term='ересь'/><category term='забавно'/><category term='грамматики'/><category term='jQuery'/><category term='автоматы'/><category term='loops F#'/><category term='ajax'/><category term='графы'/><category term='комбинаторы'/><category term='бред'/><category term='F#'/><category term='стихи'/><category term='codeplex'/><category term='automatic testing'/><category term='цитаты'/><category term='Gephi'/><category term='Linux'/><category term='Ололоды'/><category term='функциональное программирование'/><category term='заметки'/><category term='html'/><category term='lazy F#'/><category term='Qt'/><category term='aiSee'/><category term='JavaScript'/><category term='mercurial'/><category term='чистка лишних данных'/><category term='программирование'/><category term='subversion'/><title type='text'>Norgblog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/-/F%23'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/search/label/F%23'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-5722406536090747269</id><published>2012-03-03T15:19:00.000-08:00</published><updated>2012-03-03T23:41:47.127-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='Gephi'/><category scheme='http://www.blogger.com/atom/ns#' term='Clojure'/><title type='text'>Вернулся из спячки</title><summary type='text'>
Что-то я давно ничего не писал. Буду исправляться.

За последнее время я слегка разочаровался в F# и находился в неком поиске себя и тех инструментов, которые мне было бы интересно изучить и использовать.

Наверно стоит сказать пару слов почему я отказался от F#.



Плохой компилятор. В общем то всё хорошо, но дьявол кроется в мелочах. И одна из этих мелочей -  rec. Нет, он честно раскрывается в</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/5722406536090747269/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2012/03/blog-post.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/5722406536090747269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/5722406536090747269'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2012/03/blog-post.html' title='Вернулся из спячки'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-7374714719340982829</id><published>2011-06-02T09:39:00.000-07:00</published><updated>2011-06-02T09:39:21.288-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsi'/><category scheme='http://www.blogger.com/atom/ns#' term='automatic testing'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Тестирование библиотек F# в Visual Studio</title><summary type='text'>Когда создаётся новый проект F# Library, то в довесок в *.fs файлу идёт Srcipt.fsx. И в этот скрипт логично бы запилить функционал теста работы библиотеки, причём хорошо бы прогонять этот тест автоматически.

Оказывается это возможно и делается довольно легко и просто.

Итак, по по пунктам:

1. ПКМ на Script.fsx -&gt; Properties -&gt; Copy to Output Directory выставить в Copy Always. Это необходимо для</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/7374714719340982829/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2011/06/f-visual-studio.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/7374714719340982829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/7374714719340982829'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2011/06/f-visual-studio.html' title='Тестирование библиотек F# в Visual Studio'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-5375078481582647788</id><published>2011-04-27T11:04:00.000-07:00</published><updated>2011-04-27T11:07:02.677-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматы'/><title type='text'>Генератор функций являющихся автоматами</title><summary type='text'>Переоткрыл очередной  велосипед.
Меня всегда раздражало то, что для задания автомата приходилось  что-то примерно такого вида(mutable можно и на ref заменить, не суть  важно):

type Aut(state: 'S) =
  let mutable st = state
  
  member this.Next(x: 'A): 'B =
    ...
    st &lt;- ...
    result
т.е. делать отдельный класс под каждый автомат или класс  обёртку. Мне хотелось чего-нибудь более </summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/5375078481582647788/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2011/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/5375078481582647788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/5375078481582647788'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2011/04/blog-post.html' title='Генератор функций являющихся автоматами'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-897382679926687736</id><published>2010-12-28T07:46:00.000-08:00</published><updated>2010-12-28T07:46:39.280-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='комбинаторы'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><title type='text'>Композиция функций и странные баги</title><summary type='text'>Начал потихоньку вникать в теорию комбинаторов и решил попробовать их реализовать на F#.

Но наткнулся на один странный баг, который не смог воспроизвести дома. А именно, есть комбинатор функций a, b:

let (|&gt;&gt;) a b =
    fun x -&gt; a x |&gt; b
Так вот, используя интерпритатор F# из плагина к VS2008 я не мог построить комбинацию скажем таких функций:

let f1 x = x + 1
let f2 x = x.ToString() </summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/897382679926687736/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/897382679926687736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/897382679926687736'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/12/blog-post.html' title='Композиция функций и странные баги'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-3941441595655514216</id><published>2010-12-16T10:53:00.000-08:00</published><updated>2010-12-16T10:53:34.901-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><title type='text'>F# Snippets</title><summary type='text'>Бродя по интернету в поисках инфы про quotations наткнулся у Томаса Петричека на следующую ссылку: http://fssnip.net/

более чем полезный ресурс, особенно если он будет и дальше развиваться.</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/3941441595655514216/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/12/f-snippets.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/3941441595655514216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/3941441595655514216'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/12/f-snippets.html' title='F# Snippets'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-4333021737104091991</id><published>2010-11-30T11:44:00.000-08:00</published><updated>2010-11-30T11:49:47.441-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='lazy F#'/><title type='text'>Скорость вычислений на  F#</title><summary type='text'>Недавно задумался над скоростью вычислений в F#, а вернее о том, стоит ли заморачиваться использую lazy() и seq. Поверхностные тесты seq показывают, что seq лучше для вычислений чем list:



&gt; Seq.sum (seq{ for i in 1.0 .. 50.0 -&gt; 1.0/(i*i*i) });;
Real: 00:00:00.001, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
val it : float = 1.201860863
&gt; List.sum [ for i in 1.0 .. 50.0 -&gt; 1.0/(i*i*i) ];;
</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/4333021737104091991/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/11/f.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/4333021737104091991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/4333021737104091991'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/11/f.html' title='Скорость вычислений на  F#'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-1972878709281698935</id><published>2010-11-19T13:28:00.000-08:00</published><updated>2010-11-19T13:29:47.333-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><title type='text'>Ну разве этот код не красив?...</title><summary type='text'>/// L1 ⊕k L2 = {w | (w = xy, x ∈ L1, y ∈ L2, |xy| 6 k) ∨ (w = γ, xy = γβ, x ∈ L1, y ∈ L2, |γ| = k)}.
let plus k (L1 : List) (L2 : List) =
    List.fold (fun (acc : list) (x : string) -&gt;
        (List.map (fun (y : string) -&gt; 
                if (x.Length + y.Length) &lt; k 
                    then x + y
                    else (x + y).Substring(0, k)
                ) L2 
            ) @ acc
</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/1972878709281698935/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/11/blog-post_19.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/1972878709281698935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/1972878709281698935'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/11/blog-post_19.html' title='Ну разве этот код не красив?...'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-2335756791736889533</id><published>2010-10-27T10:29:00.000-07:00</published><updated>2010-10-27T10:29:12.348-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><title type='text'>Upd. Паттерн матчинг</title><summary type='text'>В догонку к предыдущему сообщению.


let find = function
    | "by" :: "name" :: _ :: []  -&gt; 3
    | "by" :: "autor" :: _ :: [] -&gt; 4
    | "by" :: "autors" :: _ :: [] -&gt; 5
    | _ -&gt; 0и let find = function
    | "by" :: "name" :: t when t &lt;&gt; [] -&gt; 3
    | "by" :: "autor" :: t when t &lt;&gt; [] -&gt; 4
    | "by" :: "autors" :: t when t &lt;&gt; [] -&gt; 5
    | _ -&gt; 0Так вот, 2й вариант значительно хуже! Он </summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/2335756791736889533/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/10/upd.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/2335756791736889533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/2335756791736889533'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/10/upd.html' title='Upd. Паттерн матчинг'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-236184209393484641</id><published>2010-10-27T10:16:00.000-07:00</published><updated>2010-10-27T10:17:05.999-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><title type='text'>Паттерн матчинг и выделение памяти</title><summary type='text'>Есть небольшой и довольно простой код:


let replace = function
    | "by" :: "id" :: t :: [] -&gt; 8
    | _ -&gt; 0t :: [] - используется для того, чтобы гарантировать наличие одного свободного эл-та в списке.
И вроде бы всё хорошо, но если посмотреть в рефлекторе, то можно увидеть такую картину:

 public static int replace(FSharpList&lt;string&gt; _arg1)
{
    if (_arg1.get_TailOrNull() != null)
    {
</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/236184209393484641/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/10/blog-post_27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/236184209393484641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/236184209393484641'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/10/blog-post_27.html' title='Паттерн матчинг и выделение памяти'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-1067972620516153393</id><published>2010-10-26T15:39:00.000-07:00</published><updated>2010-10-26T15:41:51.060-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><title type='text'>mutable привязки, интерпретатор и массивы</title><summary type='text'>Есть такой код:

let mutable x =
    [|
     1; 2; 3; 4; 5;
     2; 3; 5; 6; 3;
     |]
 
let to_null =
    for i in 0..9 do        x.[i] &lt;- 0
загоняем его в интерпретатор и получаем соотв.:

val mutable x : int [] = [|0; 0; 0; 0; 0; 0; 0; 0; 0; 0|]
val to_null : unit = ()


Всё правильно, всё логично.

А теперь снова засунем в интерпретатор x:
val mutable x : int [] = [|1; 2; 3; 4; 5; 2; 3; 5; 6</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/1067972620516153393/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/10/mutable.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/1067972620516153393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/1067972620516153393'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/10/mutable.html' title='mutable привязки, интерпретатор и массивы'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-850158693993752640</id><published>2010-10-15T10:55:00.000-07:00</published><updated>2010-10-15T10:56:41.531-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='динамические системы'/><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><title type='text'>Динамические системы в F# - задание, динамика</title><summary type='text'>Решил начинать потихоньку писать код по ДС на F#. Оказалось это очень удобно и невообразимо просто, если знать что такое карринг;)

Итак, ДС состоит из двух элементов:

Множество состояний S;
Функция переходов(эволюции) f : S -&gt; S.
очевидным образом можно примерно получить описание такого объекта на F#:Set&lt;'a&gt; * ('a -&gt; 'a),
т.е. это кортеж из множества и функции.
Ну с множеством всё понятно - это</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/850158693993752640/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/10/f.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/850158693993752640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/850158693993752640'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/10/f.html' title='Динамические системы в F# - задание, динамика'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-5612189584688675915</id><published>2010-10-08T11:33:00.000-07:00</published><updated>2010-10-08T11:36:42.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='грамматики'/><category scheme='http://www.blogger.com/atom/ns#' term='fsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><title type='text'>Удаление бесплодных и недостижимых символов из КС-грамматики</title><summary type='text'>
Не далее как сегодня утром я таки дошёл с флешкой и таки сдал эти задачки:)

Привожу тут код этих алгоритмов:

N, E - Set - мн-ва не\терминальных символов
P - Set&gt; - мн-во правил грамматики


// функция построения Ni для DelSterileChar
    let rec del_char (N' : Set) : Set = 
        let Ni : Set = 
            Set.map (fun (a, b) -&gt; 
                        if List.forall (fun e -&gt; N'.Contains(</summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/5612189584688675915/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/10/blog-post.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/5612189584688675915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/5612189584688675915'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/10/blog-post.html' title='Удаление бесплодных и недостижимых символов из КС-грамматики'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-543678212484521091</id><published>2010-08-29T06:21:00.001-07:00</published><updated>2010-08-29T06:21:40.960-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='class F#'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>"Кости" в консоли на F#</title><summary type='text'>небольшая "игрушка" написанная на F# с применением ООП...
написанная правда фигово с точки зрения того же ООП:)

смысл - посмотреть, как юзаются классы с F#)

module BoneGame

open System
open System.Collections.Generic

#light

type UserInterface () =
    member x.Roll : bool =
        printfn "Вы будете бросать кубик?"
        x.QuestYN

    member x.PrintState (data : list) : unit = 
        </summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/543678212484521091/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/08/f_29.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/543678212484521091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/543678212484521091'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/08/f_29.html' title='&quot;Кости&quot; в консоли на F#'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-4398412398431194305</id><published>2010-08-27T10:16:00.000-07:00</published><updated>2010-08-27T10:19:03.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='циклы F#'/><category scheme='http://www.blogger.com/atom/ns#' term='loops F#'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><title type='text'>Циклы на F#</title><summary type='text'>Сейчас попытался реализовать довольно тривиальный цикл, который на C++ выглядел бы следующим образом:

while(true)
{
    string buf = "";
    cout &lt;&lt; "write string(Y/N): ";
    cin &gt;&gt; buf;
    if(buf == "Y") return true;
    if(buf == "N") return false;
}
довольно тривиальная весчь, заставляющая ввести либо Y, либо N.
но вот на F# возникли некоторые проблемы(предположительно из-за того, что </summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/4398412398431194305/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/08/f_27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/4398412398431194305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/4398412398431194305'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/08/f_27.html' title='Циклы на F#'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5219626453078054207.post-6766124222560195369</id><published>2010-08-18T13:53:00.000-07:00</published><updated>2010-08-18T14:03:32.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='функциональное программирование'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>F#, первое знакомство</title><summary type='text'>F# - это функциональный язык разработанный в M$ под платформу .Net, близкий родственник Haskell.

Первые ощущения от языка - странно.
Оч. похоже на Haskell и Python на первый взгляд. Сразу бросается в глаза использование отступов для различения блоков кода, но это есть гуд кстати(есть и в питоне и в хаскеле).
Потом... функцию main можно определить следующим образом:
let main ( _ ) =
    ...
ну </summary><link rel='replies' type='application/atom+xml' href='http://norgblog.blogspot.com/feeds/6766124222560195369/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://norgblog.blogspot.com/2010/08/f.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/6766124222560195369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5219626453078054207/posts/default/6766124222560195369'/><link rel='alternate' type='text/html' href='http://norgblog.blogspot.com/2010/08/f.html' title='F#, первое знакомство'/><author><name>Максим Карандашов</name><uri>https://profiles.google.com/109475349058009335214</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-hSVmOr5XsXM/AAAAAAAAAAI/AAAAAAAAAFs/_BWIXYgewpg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
