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

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

VBイジってみました。Tourその15の寄り道。イ。

2022-06-10 08:21:24 | C#、VBなど

 いつもadvancedなコメントをくれます、cametan_42さん(ブログ)、有難うございます。最大公約数を求めるC言語のコードを示してくれました。これならVBでも出来そうと、recを宣言しない、VBでやってみました。関数型とは書く人の思想なのかもしれませんね。勿論、適している言語とそうでない言語はあるでしょう。関数型は変数という言葉を使わない。適した言語は、”束縛”という言葉を使う。再帰も使うのかもしれません。手続き型とは結構深い溝がありそうです。


コメント (5)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« F#イジってみました。Tourそ... | トップ | Cametan_42さんのブログに問... »
最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
そう、再帰は「考え方」なんです。 (cametan_42)
2022-06-10 09:01:46
往年のBASICでは再帰はサポートされてなくって、そういう言語じゃ無理なんですが、現代のどの言語でも基本再帰はサポートされています。
言い換えると、「再帰」の方がグローバルなんです。

例えば繰り返し構文、forは、どんな言語でもサポートされてるわけじゃあない。forがグローバルに見えるのは、単に言語設計者が「☓☓と言う言語は○○と言う言語の構文を真似して・・・」と、人為的に「作ってる」に過ぎないんです。
isamさんがここで実験した通り、VBでも再帰をサポートしてる以上、仮にVBを全く知らない人でも繰り返しは再帰さえ使えば実現出来る(取り敢えず効率性は置いておきますが)。
再帰は繰り返しの基本です。と言うより、プログラムは

1. 逐次処理
2. 条件分岐

の2つの機能さえあれば、「取り敢えずは書ける」と言うのは大きな基本なんです。
返信する
関数型言語使える人 (isam)
2022-06-10 20:32:52
はっきり言えば尊敬しますね。すべての手続を関数型に置き換える、書くことは、絶対不可能ではないのでしょう。
 Schemeとかは、全て関数型と言えるんでしょうか?
 遅くなりましたが、コメント有難うございます
返信する
Scheme (cametan_42)
2022-06-11 06:06:48
> Schemeとかは、全て関数型と言えるんでしょうか?

SchemeもOCamlも「不純な」関数型です。
不純な、と言うのは、副作用を簡単に扱える、と言う事です。
副作用には

・代入
・入出力

なんかがあります。何気に使ってる、例えばprintとかそれに類する機能は実は「計算じゃない」ってぇんで、こういうのを副作用と言います。
純粋な関数型言語、例えばHaskellなんかは入出力を扱うのが「出来ない」とは言わないけど、メンド臭いです。
逆に言うと、SchemeもOCamlも、望ましくはないけど、手続き型言語のようにプログラムを書く事は可能です。
ただ、せっかく勉強するならその路線からは離れた方がいいですよね。

> すべての手続を関数型に置き換える、書くことは、絶対不可能ではないのでしょう。

不可能じゃあないですね。ただ、高階関数をサポートしてるか否か、ってのはかなりスタイルに影響はします。
返信する
F#も不純な関数型? (isam)
2022-06-11 20:37:01
 コメント有難うございます。と言うことはF#も不純なということですかね。多くの言語がそうということになりますね。Scala,Kotlin,は関数型でも書けるとありますが、流石にVBは関数型とは言わないでしょうし、C言語も言わないでしょう。代入命みたいですからね。constもありますが、基本は変数は変更可能です。
返信する
F#は不純 (cametan_42)
2022-06-11 20:57:15
> と言うことはF#も不純なということですかね。

そういう事です。
でもそれでいいんですよ。
純粋関数型言語だと「フツーの言語が出来る事」が今度はやりづらくなるんで、まぁ、Haskellとか触ってみたい、って言うのなら止めませんが(笑)、計算は書きやすくても入出力が厄介だ、ってのはこれがまた別に問題が生じますよね。

余談ですが、関数型言語に対するアイロニー(皮肉)で、

「関数型言語に出来る事と言ったら、パソコンの電源点けて温度が上がるのを待つだけだ」

とか言うのがあって(笑)、まぁ、そこまで縛りを入れなくても良いとは思ってます。

> 流石にVBは関数型とは言わないでしょうし、C言語も言わないでしょう。代入命みたいですからね。

そうですね。それらは手続き型言語です。
ただ、先にも見たように関数型っぽく「書こう」と思えばある程度は出来ます。それによりコードを圧縮可能な事はしばしば生じますね。
どっちにせよ、VBだろうとCだろうと、関数型で得た「テクニック」はそのまま活かせないにせよ、プログラムを書く際の「視点」とか「切り口」がだいぶ変わっていく(良い意味で)と思います。
また、Rustなんか見ても分かりますが、「次世代の低レベル操作用言語」もかなり関数型的なアプローチを導入してるんで(例えば条件文は条件「式」になってて値を返す)、その辺攻略するにも良い基盤を与えてくれるでしょう。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

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