“計算可能な関数”というと一番わかりやすいイメージはそれを計算するプログラムがあるということである。ここではBYOBで計算できる関数を定義する。BYOBの機能はたくさんあるのでそれらを何でも利用していいとなると議論が面倒になるので,ここでは機能を制限することにする。
以下のように同時並行的にBYOB関数ブロックを定義する。なお,定義はBNF記法風に記述する。
関数ブロックはレポーター型のブロックで右のように定義する。ブロックの作成は変数カテゴリー中にある「ブロックを作る」で行い,レポーター型のブロックとして作成する。ブロック名は自由である。また,ブロック内では仮引数用の変数として,x1,x2,...,xnを入力変数,aを出力変数として用い,aの値をreportすることにする。なお,スクリプト変数は必要に応じて増やして良い(▶をクリックすると増やせる)ものとする。
関数φは,φの値を報告する適当なBYOB関数ブロックを定めることができるとき,BYOBで計算可能であるという.
右図の関数ブロックを考えると,例えば(7,9)に対し次のようにmult(7,9)=63を報告する。
上記の例は最初から式に+や*があるので,計算できるのは当たり前であるが,一般に帰納的関数はBYOBで計算可能であることはすぐわかる。また,逆にBYOBで計算可能な関数はすべて帰納的関数であることもわかる。(こちらはやや面倒である。)