令和7年度 III-4

科目: 専門科目 / 分野: 情報工学部門 / 年度: 令和7年度

III-4 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

ラムダ式 ((λxy.xy(λxy.y))(λxy.y)(λxy.x)) をβ簡約して得られるβ正規形として、最も適切なものを選ぶ問題。

解説

この問題で問われていること

ラムダ式をβ簡約して、β正規形を求める問題。

解き方

① λxy.x=「2つのうち1番目を返す」(true)、λxy.y=「2番目を返す」(false)。前から順に引数を代入する
② x=λxy.y、y=λxy.x を代入 → (λxy.y)(λxy.x)(λxy.y) → 2番目を返すので λxy.y
③ ④

正解が正しい理由

λxy.xy(λxy.y) は、引数x、yを取り、「x y (λxy.y)」を返す関数である。これに、(λxy.y) と (λxy.x) を順に適用する。まず x に λxy.y を代入すると、λy. (λxy.y) y (λxy.y) となる。次に y に λxy.x を代入すると、(λxy.y)(λxy.x)(λxy.y) となる。λxy.y は、2つの引数を取り、2番目の引数を返す関数なので、(λxy.y) a b = b となり、a=λxy.x、b=λxy.y から、結果は λxy.y である。これ以上簡約できないβ正規形は λxy.y であり、④が正しい。

各選択肢について

覚えるべきポイント

λxy.y は「2つの引数のうち2番目を返す」関数、λxy.x は「1番目を返す」関数(チャーチ真偽値のfalse、true)。β簡約は、束縛変数に引数を代入して進める。

キーワード: ラムダ計算、β簡約、β正規形、関数型プログラミング、情報工学部門

出題履歴

類題(同じ論点の別問題)