スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門基本編落穂拾い その18 (mutual recursion 相互再帰)

再帰的関数定義で、関数fはgを呼び出したく、一方関数gはfを呼びたい場合次のようにandを使って定義します。
 

 
> let rec f counter =
        printfn "fが呼ばれました"
        if counter = 0 then
            ()
        else
            g (counter - 1)
    and g counter =
        printfn "gが呼ばれました"
        if counter = 0 then
            ()
        else
            f (counter - 1);;
 
val f : int -> unit
val g : int -> unit
 
> f 5;;
fが呼ばれました
gが呼ばれました
fが呼ばれました
gが呼ばれました
fが呼ばれました
gが呼ばれました
val it : unit = ()
 
> g 5;;
gが呼ばれました
fが呼ばれました
gが呼ばれました
fが呼ばれました
gが呼ばれました
fが呼ばれました
val it : unit = ()

なお3つ以上の場合も2つの場合と同様にandでつないでいけばOKです。
 

 
> let rec f counter =
        printfn "fが呼ばれました"
        if counter = 0 then
            ()
        else
            g (counter - 1)
    and g counter =
        printfn "gが呼ばれました"
        if counter = 0 then
            ()
        else
            h (counter - 1)
    and h counter =
        printfn "hが呼ばれました"
        if counter = 0 then
            ()
        else
            f (counter - 1);;
 
val f : int -> unit
val g : int -> unit
val h : int -> unit
 
> f 5;;
fが呼ばれました
gが呼ばれました
hが呼ばれました
fが呼ばれました
gが呼ばれました
hが呼ばれました
val it : unit = ()
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。