コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
こういち ◆ou0jbJnEJ0Kb
2024/7/11 22:21 ネタバレ
関数とサブルーチンの区別って人によって分かれそうですよね。
僕は
関数…数学における関数とほぼ同じ意味。入力に対して出力が一意に決まり(同じ入力を与えたら状況に依らず必ず同じ出力を返す)、値を返す以外に外部に一切作用しないもの。
サブルーチン…処理をひとまとめにしたもののうち、return以降実行される処理がないもの(個人的には再帰関数を純粋なサブルーチンとして認めていない)

まぁ日常的にはdef文に相当するもの全部サブルーチンと呼んでるんですけど(上の認識だと関数でもサブルーチンでもない謎の手続きが存在してしまうので)

コメント

アバター
Ryou Tanpo 2024/7/12 16:24 ◆AI5iRr9FjmkJ
超個人的解釈ですが、自分の中では

DEF (プチコン標準のものも含む) のうち
・呼び出しが式の中に置かれる
 (括弧を伴う) →「関数」
・呼び出しが単独の文である
 (括弧を伴わない) →「命令」

ジャンプしたあと、RETURNで戻って来る (即ち**GOSUB**でジャンプされることが期待されてる) ラベルを「サブルーチン」

と勝手に定めて呼称してました。

ただ、関数の呼び出しと、OUT引数が1つの命令の呼び出しは相互に互換性がある (ただし式か文かの違いがあるので完全な糖衣構文? ではない) ので、例えばRND関数も RND 6 OUT X と書いたらそれは命令……

言語仕様的な分類。あっ、あくまで個人の意見です。もしかしたらぜんぜん筋違いなこと言ってるかもしれません。
アバター
Ryou Tanpo 2024/7/12 16:30 ◆AI5iRr9FjmkJ
あんまりよくわかんないけど……「命令」と「関数」は言語仕様的な表現、「サブルーチン」は目的というか意味に着目した表現かもしれない。
アバター
高原のな 2024/7/12 20:54 ◆bY8RViwvoODw
手続き型のプログラミングの文脈においては、プチコン3号以降においてDEFで定義するようなものは全部関数って呼んでしまう人です。大体Cとかそこら辺の言語の影響。
プチコンに限って、GOSUBで飛ぶことを想定したラベル〜RETURNはサブルーチンと呼んでいます。初代プチコン・mkII→ほかの言語→プチコン3号と学んできたのでその影響だと思います。
こういちさんの定義の関数は「純粋(な)関数」とか「副作用のない関数」とか「数学的な関数」と呼んでいます。手続き型プログラミングの文脈だと大体これで困らないので……
(完全に余談:あまり関数型やったことないんですが、関数型プログラミングやるときは、副作用のない関数を単に「関数」と呼んで、副作用のある関数の方を「副作用のある関数」と呼ぶようになるかもしれません……)
アバター
こういち 2024/7/12 23:10 ◆ou0jbJnEJ0Kb
Ryou Tanpoさん
そう呼び分ける人は多そうですよね。(そう呼び分けてた時期あります)

高原のなさん
純粋関数って呼び分けるのはよく聞きますね。
呼び分けが面倒とか数学の関数と違う意味なのが人に説明する上でややこしいとかそういう理由で長いこと「もう全部サブルーチンで良いんじゃないかな」ってなってたんですけど、サブルーチン==関数と認識してた時期はありますね。
で、ここ数日で「途中returnのある手続きや再帰関数をサブルーチンと呼ぶのはどうなの?」という意思が芽生えつつある感じです。
アバター
うょリウム 2024/7/16 16:02 ◆gZYHRw9FSPa8
関数が状況によって変わるなら、
その状況も関数に入力する値のうち、
という解釈もありそうな気がします。

DEF Q(N,状況)と毎回書くべきところを
省略して、状況の部分をDEF文に入れて
固定しているだけなので…

その場合、DEFの呼び出し文が簡潔になるメリットと、融通がきかなくなるデメリットがありそうですね。

でもそういうひねくれた関数けっこう好きかも。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -