ねこものがたり

いちにちいっぽ

プログラミングの基礎 #22

https://nerimarb.esa.io/posts/35

戻り値が関数の関数について学習しました。

ふとした流れで"Rubyで書き換えてみよう"ということになったのでやってみたら、同じようにできなくてすごく悔しい結果に・・・。元とRubyで書いたのは以下のような感じです。

(* OCaml *)
let twice f = let g x = f (f x) in g ;;
let twice f = let g x = f in g ;;
twice add3 7 ;;
# ruby

def twice(f, arg)
  f.call(f.call(arg))
end

def add3
  -> (arg) { arg + 3 }
end

Rubyでは引数で渡したメソッドのメソッドと引数をそれぞれ変数に入れるというのができない、というか、OCamlではそれができることが発見でした。何気ないことだけどもしこれがRubyでもできたら便利そうです!

プログラミングの基礎 #21

13章  一般化と高階関数 をつづきから。 https://nerimarb.esa.io/posts/34

「引数の型がなんでもいいことを多相性という」という説明が出てきたのですが、英語ではPolimophizmと書いてあったので「え!ポリモーフィック思ってたんと違う!」となったのが個人的に難しくて発見があってワクワクした箇所です。

Rubyでは、引数には型を求めないので(中でエラーになることはあるかもしれないけれど)、そういうのもポリモーフィズムっていうん?と思ったのが疑問のきっかけです。

Rubyの文脈でのポリモーフィズムはダックタイピングみたいな理解をしているのだけど、本当にそうなのか、もう何もわからないって気持ちでいます。

で、やや混乱気味だし難しいことに足を突っ込んでしまった感はあり、情報が整理できていないのですが、多相性にも種類があるということまではわかりました。

ポリモーフィズム - Wikipedia

"Ruby 多相性"で検索すると、もれなく結果のトップに松本宗太郎さんの論文が並ぶので、”なるほど、これがいつか松田さんがおっしゃっていた、sotaroさんは型を何年も研究しているスペシャリスト”ということかと、その一端を感じた気がしました。 f:id:neko314:20200621123102p:plain