より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

F#をAzure Notebooksで学ぶ

Azure NotebooksはPythonも書けますが、Google Colaboratoryに比べてF#やRに対応しているところが優れた点かなと思います。

f:id:rimever:20181231191940p:plain

C#erなのに、同じ#がつくF#を全くやったことがなかったので、これを機会に触れてみることにしました。

一通りの文法に触れられそうだなとチョイスしたのは英語ですが下記のサイトです。

F# Programming - Wikibooks, open books for an open world

F#でもPythonと変わらず、Jupyter Notebookですね。

f:id:rimever:20181231191528p:plain

let sumOfDivisors n =
    let rec loop current max acc =
        if current > max then
            acc
        else
            if n % current = 0 then
                loop (current + 1) max (acc + current)
            else
                loop (current + 1) max acc
    let start = 2
    let max = n / 2     (* largest factor, apart from n, cannot be > n / 2 *)
    let minSum = 1 + n  (* 1 and n are already factors of n *)
    loop start max minSum

printfn "%d" (sumOfDivisors 10)
(* prints 18, because the sum of 10's divisors is 1 + 2 + 5 + 10 = 18 *)

これはなかなか泣かせるサンプルですね。難しいです。

f:id:rimever:20181231204635p:plain

これは関数型言語がピッタリですね。ベースが関数ですからね。

やってみて

C#に似ているのは名前だけのようです。

関数の引数はスペース区切りで、()や,は使われません。

またインデントを用いて宣言され、{}も使われません。

自分の知る中ではPythonPowerShellを掛け合わせたような感じです。

ただ、System.Console.WriteLineのような関数を使えるあたりは、.NET一族なのだなと感じました。

.NETが使える関数型言語。それが自分の中での印象です。

Azure NotebooksもPreviewのせいかハイライトが最初のセルだけだったりとまだ未熟な印象です。