Skip to main content

tk3++

選択ソート F#

dojo/fsharp/MyList/Program.fs at main · tk3/dojo

今日は選択ソート。昨日よりはすんなり書けて満足。もっと短く書けそうだが、今の自分には無理そう。

open System

[<EntryPoint>]
let main arg =
    let rnd = Random()
    let randomArray = [| for i in 1 .. 10 -> rnd.Next(1, 101) |]

    for i = 0 to randomArray.Length - 1 do
        let mutable target = i 
        let mutable minVal = randomArray[i]
        for j = i to randomArray.Length - 1 do
            if minVal > randomArray[j] then
                minVal <- randomArray[j]
                target <- j

        let tmp = randomArray[i]
        randomArray[i] <- randomArray[target]
        randomArray[target] <- tmp

    printfn "%A" randomArray

    0

バブルソート F#

dojo/fsharp/MyList/Program.fs at main · tk3/dojo

何とか書けました。もっと早く書けそうな気がしたんだけれど、自信をなくしてしまいました。愚直にforを使っています。もっと短く書けそうな気がしますが、また今度。

open System

[<EntryPoint>]
let main argv =
    let rnd = Random()
    let randomArray = [| for i in 1 .. 10 -> rnd.Next(1, 101) |]

    for i = 0 to randomArray.Length - 2 do
        for j = 0 to randomArray.Length - 2 - i do
            if randomArray[j] > randomArray[j + 1] then
                let tmp = randomArray[j]
                randomArray[j] <- randomArray[j + 1]
                randomArray[j + 1] <- tmp

    printfn "%A" randomArray
    0

# 今回分かったこと

  • ランダムな数値の生成方法
  • Arrayは長さは変更できないが、値を後から書き換えることができる
    • randomArray.[j] <- randomArray.[j + 1]
  • 書き込みをさせたくないならListを使う
  • Array生成と同時に値を設定することが可能で、式を指定することができる
    • let randomArray = [| for i in 1 .. 10 -> rnd.Next(1, 101) |]
  • Arrayの値をアクセスは randomArray[i] なのか randomArray.[i] なのか。一緒には見える

F#はじめます

F#は以前書いてたりはしたけれど、中途半端だったので、またやり始めます。

まずはインストール。

Ubuntu に.NETをインストールする - .NET | Microsoft Learn おきまりのHello Worldをこちらのチュートリアルで。

F# チュートリアル - 5 分でできる Hello World | .NET

出力

$ dotnet run
Hello from F#

あと、コマンドの使用状況を送信しているようで、オプトアウトしたい場合は次のリンクを参考に環境変数を設定する必要があります。

https://learn.microsoft.com/ja-jp/dotnet/core/tools/telemetry

export DOTNET_CLI_TELEMETRY_OPTOUT=true

技術書典 20

買ったもののタイトル一覧です。

立ち読みで面白かったので買いました。最近キャリアについて考えることがあり、それに刺さりました。

また本を書きたくなり、その情報集めのため。手軽に作るにはこれくらいでいいのかなと思いました。

立ち読みで買うことになった本。「はじめてサークル参加したくなったら読む本」を買う予定だったのが、追加でこちらも購入しました。

これも情報収集のため。こちらは買いたいリストに入れておいたので特に試し読みせずに購入。

こういうソースコードや仕組みを探索する本が好きだから購入。dateコマンドは使うには使うがいつも同じ使い方をしていたので、新しい気づきを得るきっかけになって良かった。epochの話は面白かった。