maxfie1d のブログ

マイクロソフト系技術ネタを中心に書きます。

Macで.NET CoreでF#!

表題どおりです。

必要なものをインストール

  • .NET Core SDK

www.microsoft.com

任意でインストール

ソリューション、プロジェクトを作る

F#はスクリプト言語っぽく使うこともできますが、今回は ソリューションを作って、プロジェクトを作ってやりたいと思います。

# ソリューションを作成する
$ dotnet new sln -o fsharp-dotnet-core-test

# ディレクトリを移動する
$ cd fsharp-dotnet-core-test

# コンソールアプリケーションプロジェクトを作成する (言語はF#で!)
$ dotnet new console -lang F# -o src/App

# プロジェクトをソリューションに追加する
$ sln add src/App/App.fsproj

ここまでで下準備は完了です。

とりあえず実行してみる

プロジェクト作成時点でProgram.fsのソースファイルの中身は 以下のようになっています。

let main argv =
    printfn "Hello World from F#!"
    0 // return an integer exit code

この状態でとりあえず実行してみましょう。

# プロジェクトを指定してビルド&実行する
$ dotnet run --project src/App/App.fsproj 

# 結果:
# Hello World from F#!

うまく実行できたら成功です。

F#っぽいコードに書き換えて実行してみる

プロジェクトの中にあるProgram.fsを以下のように書き換えて実行してみます。 コードの書き換えはVSCodeがおすすめです。他のエディタでももちろん可。

VSCodeだと補完も効きます。 f:id:maxfieldwalker:20180123141731p:plain

// Learn more about F# at http://fsharp.org

open System

[<EntryPoint>]
let main argv =
    let square x = x * x
    let sumOfSquares n =
        [1..n]
        |> List.map square
        |> List.sum
    
    let result = sumOfSquares 4
    printfn "%A" result
    0 // return an integer exit code
# ビルド&実行する
$ dotnet run --project src/App/App.fsproj 

# 結果:
# 30

30 と表示されたら成功です。

念のため說明すると、sumOfSquares関数に4を渡したので [1;2;3;4]というリストが作られます。これをList.map関数に渡して それぞれsquare関数によって二乗されるのでリストは[1;4;9;16]となります。 最後にList.sum関数に渡されてリストの要素が足し合わされるので30となります。