: binrec-y ( pred true false final quote -- quot ) [ '[ [ dup call call ] curry _ swap _ swap _ swap _ ] ] dip compose dup call ; inline : [binrec] ( biny pred true false final -- quote ) '[ dup @ _ [ @ [ @ ] bi@ @ ] if ] ; : binrec ( x pred true false final -- result ) [ [binrec] ] binrec-y call( in -- out ) ;