goo blog サービス終了のお知らせ 

新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

F#イジってみました。其の一

2022-05-28 12:42:10 | F#

 Cametan_42さんの助言では、Visual Basic が古い言語で新しい技術には、ツギハギで対応している、という事らしいので、マイクロソフトではF#が比較的、関数型言語になっているらしい、新しい言語に近い、と自分では感じました。では、自分には手に負えるか?やってみないと分からない、ですしね。

 module BasicFunctions = とある、=は何なの?下にあるmodule HelloSquareでは=無いですしね。上の図のコメントはgoogleで翻訳したんですが、自分が訳すより良いでしょう。letで関数を定義するとあるのですが、変数も定義しているように見えます。ということは関数でも変数でも同じ扱いしている?

 

最後の行に0が有って、それを返しているようですが、returnは無い。



最新の画像もっと見る

8 コメント(10/1 コメント投稿終了予定)

コメント日が  古い順  |   新しい順
どうです? (cametan_42)
2022-05-28 17:51:02
面白いでしょ(笑)?
返信する
ん、コメント有難うございます (isam)
2022-05-28 22:52:11
 Schemeでしたか?Dr.Racketよりは親しみやすく感じますが、F#関連の参考資料が少ないのが気になります。
 Visual Studioで使えましので、多少は楽かもしれません。VSCodeも使えるので、Ubuntuでも使えるでしょう。らしい。
返信する
OCaml/F# (cametan_42)
2022-05-29 00:09:10
> Dr.Racketよりは親しみやすく感じます

うん、割にLispのカッコがダメな人はOCaml/F#に行っちゃうかな。
そしてMicrosoftが選ぶ/作る言語に間違いはないです。
過去、唯一消えちゃった例ってのはJ#くらいしかないんじゃないかしらん?(J#はJavaのMicrosoft実装)
多分色々リサーチして、一番「分かりやすい」関数型言語としてOCamlのスタイルを選んだ。そういう事だと思います。

> F#関連の参考資料が少ない

多分、一番短く簡潔に書かれてるのはこれかな?

F#で初めての関数型プログラミング:
https://atmarkit.itmedia.co.jp/fdotnet/special/introfs_01/introfs_01_01.html

あと、言語仕様上はかなりOCamlと被ってるので、こないだ書いたお茶の水女子大学のOCamlの授業ビデオを使ったり、OCamlの入門でかなり役立つとは思います。上手く動かなかったトコだけMicrosoft Docで調べる、で充分なんじゃないかな。

極端な話、OCaml/F# の真髄(多分?)はmatch文を使いこなす事なんで、

match:
https://docs.microsoft.com/ja-jp/dotnet/fsharp/language-reference/match-expressions

これが使いこなせれば免許皆伝、って言ってもいいくらいなんじゃないですかね?知らんですが(笑)。
もう「何がなんでもmatch文ゴリ押しでかなりの部分が済む」ってのもOCaml/F#の特徴かも、とは思います。
返信する
なんとか書けるまで行きたい (isam)
2022-05-29 15:29:09
 Dr.Racketでは頓挫したので、最近の言語にはある機能、例えば高階関数や遅延評価などもありそうですので、Scalaでも中途半端だったので、F#で再チャレンジですかね。
 関数型でも書けると言うことだと、手続き型に戻ってしまいそうですが…。
返信する
関数型 (cametan_42)
2022-05-29 16:50:11
> 最近の言語にはある機能、例えば高階関数や遅延評価などもありそうですので、Scalaでも中途半端だったので、F#で再チャレンジですかね。

あります。F#はその辺の機能はてんこ盛りです。
特に遅延評価なんかは、C#生え抜きの人でもLINQでの遅延評価は悩むらしいんですが、反面、F#な人たちは苦にしません。
結局、その辺、F#みたいに言語構造に初めから入ってる言語の方がラクで理解しやすい、って事ですね。

> 関数型でも書けると言うことだと、手続き型に戻ってしまいそうですが…。

う〜ん、関数型ってそんなに難しいですかね?
とにかく何でも「引数」と「返り値」の連鎖で書いてくようにすれば自ずとからそういうスタイルになります。
そして変数の変更を行わない。
意図して書こうと思えばVBでも書けますよね。高階関数は使いづらいけど・・・・・・。
いずれにせよ、引数と返り値を連鎖させていく、と言う練習にF#は手助けをしてくれると思います。
返信する
cametan_42さん、コメント有難うございます (isam)
2022-05-29 21:23:14
 cametan_42さんが前に書いてましたが、VBだとなんとなく書けちゃうので、手本が殆どない、と書いていたと思います。
 一関の図書館でも、VBの参考書は殆ど無いですし、F#も皆無です。アマゾンを見ても、ほとんど10年前の参考書です。高い本を買っても参考になるのか判断付きません。
 どういう経緯で本が仕入れされているのかわかりませんが、一番あるのがPython関係です。その他、あまりメジャーと思われない言語もあるのですが、GoとかR、Rustもありました。ネットの情報が少ないのが、良いのか?悪いのか?やってみないとわかりませんね。
 古い情報とかもPythonにはあるんだろ負うと思います。
返信する
Objective Caml (cametan_42)
2022-05-29 22:26:01
>  cametan_42さんが前に書いてましたが、VBだとなんとなく書けちゃうので、手本が殆どない、と書いていたと思います。

うん、書きましたね。
言い換えるとVB/VBAだとグル(導師)がいない。
それで僕はVBやるのを止めちゃったんです。

AmazonにあるVB系の本でも批判が凄かったりしますしね・・・「こんなコードを書くレベルで本を出すな」とか(笑)。
ところがVB/VBAの新参者は「何がVB/VBAで綺麗なコードと言えるのか」指針がない。
だから学習するのが凄く困難な言語になってる、ってのは事実だと思います。

逆に言うと、関数型言語をマスターすれば、それでも仮にisamさんがVBを愛用する、って前提なら「技術」はメチャクチャ上がるとは思いますよ。
やっぱり「綺麗に書ける言語」を使った経験、ってのはバカにならないんです。

>  一関の図書館でも、VBの参考書は殆ど無いですし、F#も皆無です。アマゾンを見ても、ほとんど10年前の参考書です。高い本を買っても参考になるのか判断付きません。

やっぱある程度OCaml本に頼るのが一番でしょうね。
完全互換、って事はないけど、相当役立つと思います。
OCamlの本の出版数は少ないけど、ネットの評を見る限り、どれも良書になってる模様ですし。
実は出版数と「本の質」って必ずしも比例関係になくって、OCamlなんかは良い本抱えてると思いますね。

逆に、何度も書いたけど、Python関連書籍は増えてても質は下がってる一方です。
返信する
cametan_42さん、コメント有難うございます (isam)
2022-05-30 13:50:20
 関数型のプログラミングには、これといった定義はないみたいですね。無名関数を扱うことができれば、関数型と言えるんでは、という人もいるようです。
 VBもLambdaのキーワードは使いませんが、出来るようですし、cametan_42さんも、不可能とは書いてませんし、書く人の心がけ次第なんですかね。
 乗りかかった船ですので、マイクロソフトのF#ツアーを出来るとこまでやってみようかと思います。
返信する

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。