C#で学ぶF#入門・再(1)に行ってきた。
参加前にひと通りテキストを読んで疑問だった点について当日教えていただいたのでメモ。
(テキストはこちらで公開されている)
open System
let a = 1
Console.WriteLine(a)
a = 2
Console.WriteLine(a)
これでaの値が2に変更されないのは分かるが、
「a = 2」でなぜ警告だけでコンパイルエラーにならないのか、
混乱の元ではないかと思っていたが、ここでの = 演算子は == と同じらしい。
実際に書いてみたら、確かに警告の内容も値を変更できないよ、
ではなくてboolを返しているけどそれを使ってないよ、だった。

練習問題で
printfn "%f" sqrt(2)
はエラーになるため
printfn "%f" (sqrt(2.))
にしないといけないというものについて、
カッコをつけようがつけまいが sqrt(2.) の評価順は変わらないのでは、と思っていたが、
カッコがない場合 printfn が 3つの引数「"%f"」「sqrt」「(2.)」を取ると解釈されるためだった。

演習問題のおさらい。 【問4】C# の while, for, break を使ったプログラムを再帰を使った F# で書きなおしてみるというもの。
  • F# にはオフサイドルールがある
  • 不等号には != ではなく <> を使用する
  • 配列に添字をつけて要素を取り出すには list[0] ではなく list.[0] とドットをつける
など教わりつつ、最終的にこんな形になった。
解答例では loop の中に getNumIndex を定義する形だった、
なるほどこの中でしか使わない場合はそちらのほうがよさそうだ。

C# との比較に重点を置いた F# の入門勉強会とのことで、
C# 自体あまり詳しくないため心許なさも感じていたが、
丁寧に初歩から教えていただき、また仕事で Scala を使っていることを話すと
ところどころ Scala の話も交えつつで楽しい勉強会だった。
ありがとうございました。

Copyright© 2011-2021 Shunsuke Otani All Right Reserved .