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

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

これって関数型でプログラミングしたと言えます?

2023-06-15 14:19:45 | C#、VBなど

 九九の表です。コップ本に命令形と関数型プログラミングの例がありました。出来るだけ忠実にVBで置き換えたつもりです。関数型でプログラミングしたと言えるでしょうか?変数を使った時点で、違います、という事でしょうか?

6行目から23行目は、命令形の例です。関数型の例では、(多分、一応)Functionだけ使ってますが…。


コメント (5)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« VB2010から自動実装Property... | トップ | Visual BasicでFunctionのリ... »
最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
関数型でしたね。 (cametan_42)
2023-06-18 10:41:33
> でもScalaは純粋な関数型プログラミングではない

システム的にはF#に近いですね。あるいはOCamlとか。
要するに「オブジェクト指向を組み合わせた」関数型言語です。
原則、オブジェクト指向と関数型プログラミングは相性が悪いんで、こういう言語処理系は確かに珍しいです。
あんまない。

> 命令形でも書けます。

うん、でも大体どのプログラミング言語でも命令形で書けますね。Lispでも書ける。
結局、誘惑は「アセンブリ言語のように書く」事で、割に人間ってそっちに寄っちゃうんですよ(笑)。「あれ」とか思ってる内にそっちに近づいていく。
だから「抑制する」のはかなり練習しないと出来なかったりするのかもしれません。

> VBよりは関数型寄りかもしれません。

まぁ、VBは手続き型ですしね。FullBASICよりはC言語に近い、って感触ですが。

> 長い間の習慣で、簡単には関数型にはいけませんね。なのであっち行ったり、こっち来たりを続けると思います。

いいんじゃないですか(笑)? 楽しければ(笑)。
返信する
関数型でしたか? (isam)
2023-06-18 10:00:29
 少しホッとしました。何故かというと、コップ本の訳者は長尾高弘さんと言って恐れ多くもT大出身者です。だから何だというとそれまでですが。(笑)
 でもScalaは純粋な関数型プログラミングではないので、命令形でも書けます。これが悪いと言えば、そうかも知れません。100%関数型で書けない理由になっている気もします。でもVBよりは関数型寄りかもしれません。
 長い間の習慣で、簡単には関数型にはいけませんね。なのであっち行ったり、こっち来たりを続けると思います。
 
返信する
ごめんなさい、勘違いしてました。 (cametan_42)
2023-06-17 21:07:14
>  Visual Basic の場合は、Functionのリターンは書かないのが普通で、(書けたかなあ?)ファンクション名に代入した形式が、関数の返り値だと思います。

ああそうなんですか。VisualBasicってPascal形式なんですね。知らんかったです。
一応調べてみたらreturn文もあるらしいんだけど、あんまポピュラーじゃないのかな。
だとしたら関数型プログラミング、ですね。大丈夫です。
コピーを渡される以上、オリジナルは変更されてないんでO.K.です。
ごめんなさい。

> Bardに質問したら、Visual Basic の関数型はLINQが該当するみたいな回答でした

あー、LINQ。
うん、関数型・・・まぁ関数型なんだけど、恐らく遅延評価に近いかな。

> マイクロソフトもVBでは関数型プログラミングは不可能とも、言ってません。

出来るでしょうね。ちと面倒臭いだけ、で。

例えばオブジェクト指向じゃない言語でも「オブジェクト指向風に」は書けるんですよ。
単に言語がそれをサポートしてくれたらラクだ、ってだけの話と言えば話です。

> Forループ自体が駄目ってこともないでしょう。

ないです。
ただ、Forループでマズいのは「変数の破壊的変更目的」で使うユースケースが多いから、ですよね。
当然、Forループでも破壊的変更を避ける、あるいは破壊的変更してもそれはコピー対象に対して、ってぇのなら大丈夫です。

> 関数型の純粋な感覚は、対応した言語で可能なんですかね。

はい、可能でしょう。F#とかScalaとかだとそうでしょうね。
返信する
cametanさん、コメントありがとうございます。 (isam)
2023-06-17 08:23:41
>引数で受け渡されてるブツを「破壊的変更」してる
ByVal row as Integerのrowのことでしょうか?
破壊してないと思いますが…。認識不足ですかね?ByValだと、コピーが渡される。
 Visual Basic の場合は、Functionのリターンは書かないのが普通で、(書けたかなあ?)ファンクション名に代入した形式が、関数の返り値だと思います。
 なかなかcametanさんの書いていることが理解できません。(笑)
 Bardに質問したら、Visual Basic の関数型はLINQが該当するみたいな回答でしたし、マイクロソフトもVBでは関数型プログラミングは不可能とも、言ってません。Forループ自体が駄目ってこともないでしょう。関数型の純粋な感覚は、対応した言語で可能なんですかね。
返信する
言えないかなぁ? (cametan_42)
2023-06-16 23:22:16
returnしてないトコを見ると、作ってるのは全部プロシージャじゃないかな。で、引数で受け渡されてるブツを「破壊的変更」してる。
だから「関数型プログラミング」じゃないと思います。
返信する

C#、VBなど」カテゴリの最新記事