新しく発言する EXIT インデックスへ
内部関数定義

  内部関数定義 M31 2003/09/12 12:04:14 
  内部手続きと外部手続きでは変数の扱いが異... 白石和夫 2003/09/12 15:42:21 
   └返答ありがとうございます。 M31 2003/09/12 17:36:09 
    └10FUNCTIONf(x) 白石和夫 2003/09/12 20:00:59 
     └ありがとうございます。 M31 2003/09/16 12:55:35 

  内部関数定義 M31 2003/09/12 12:04:14  ツリーへ

内部関数定義 返事を書く
M31 2003/09/12 12:04:14
はじめまして。 ちょっと質問させてください。

今プログラムを組んでいたのですが、ヘルプを見ても外部関数と内部関数の違いがいまいちつかめません。
どうも、関数定義の記述する位置と引数の取り扱いについて違うことまでは分かりました。
で、今GOSUB命令の代用として使いたいのですが、外部関数の場合はメインルーチンで使われる変数に影響はしないが、内部関数の場合は影響すると考えていいのでしょうか?
また、外部副プログラムと内部副プログラムも同様な理解でいいのでしょうか。

あと、関数の引数を配列で取り扱うことが可能であることは分かりましたが、関数の結果を配列で取り扱うことが可能でしょうか? 例えば、5項目の結果を配列で同時に取得する様な感じです。

よろしくお願いします。

  内部手続きと外部手続きでは変数の扱いが異... 白石和夫 2003/09/12 15:42:21  ツリーへ

Re: 内部関数定義 返事を書く
白石和夫 2003/09/12 15:42:21
内部手続きと外部手続きでは変数の扱いが異なります。
外部手続きは引数以外の変数は共有しません。
内部手続きは引数以外の変数はそのまわりの変数と共通です。
GOSUB代用で使うのであれば内部副プログラムですが、余計な神経を使わないでプログラムが書けるのは外部副プログラムのほうです。
BASICでは配列値の関数は定義できないので、配列が結果としてほしいときは副プログラムの引数にします。

   └返答ありがとうございます。 M31 2003/09/12 17:36:09  ツリーへ

Re: 内部手続きと外部手続きでは変数の扱いが異... 返事を書く
M31 2003/09/12 17:36:09
返答ありがとうございます。

ということは、関数ないし副プログラム内の変数の変化をメインルーチンに引き継がせたい場合は内部手続きをとればよいという解釈でよろしいのでしょうか?

    └10FUNCTIONf(x) 白石和夫 2003/09/12 20:00:59  ツリーへ

Re: 返答ありがとうございます。 返事を書く
白石和夫 2003/09/12 20:00:59
10 FUNCTION f(x)
20 LET n=n+1
30 LET f=x^2
40 END FUNCTION
50 LET n=1
60 PRINT f(2)
70 PRINT n
80 END
だと,70行の実行結果は2ですが,
10 LET n=1
20 PRINT f(2)
30 PRINT n
40 END
50 EXTERNAL FUNCTION f(x)
60 LET n=n+1
70 LET f=x^2
80 END FUNCTION
だと,30行の実行結果は1です。つまり,下のプログラムでは,10行,30行のnと,60行のnは別物です。

     └ありがとうございます。 M31 2003/09/16 12:55:35  ツリーへ

Re: 10FUNCTIONf(x) 返事を書く
M31 2003/09/16 12:55:35
ありがとうございます。
さっそく、参考にして、プログラムを再構築してみます。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。