// mvt: survey of self-reproducing programs ; pred -1 + ; ; succ 1 + ; ; first car ; ; rest cdr ; ; concat , ; ; swoncat swap concat ; ; duco dup cons ; ; dureco dup rest cons ; ; durereco dup rest rest cons ; ; count [0 [succ] infra] swoncat ; ; deposit [dup [first] dip] swoncat ; ; self [duco] duco ; ; ints [dureco] count dureco ; ; exe [dip duco] cons duco ; ; exe-c [dip dureco] cons count dureco ; ; selfr [duco] duco ; ; c-stream [dureco] cons dureco ; ; c-stream-d [dureco] deposit cons dureco ; ; n-stream [infra dureco] cons cons dureco ; ; n-stream-d [infra dureco] cons deposit cons dureco ; ; f-stream-prepare // s [N] [F] swap // s [F] [N] [dip] cons concat // s [F [N] dip] cons // [s F [N] dip] [dup] infra // [s s F [N] dip] dup rest rest infra // [Fs Ns F [N] dip] uncons uncons // Fs Ns [F [N] dip] [pop dup] swoncat // Fs Ns [pop dup F [N] dip] [infra durereco] cons; // Fs Ns [[pop .. dip] infra durereco] ; ; f-stream f-stream-prepare cons cons durereco ; ; f-stream-d f-stream-prepare deposit cons cons durereco ; ; inter // s [P] [dip cons dureco] cons // s [[P] dip cons dureco] [uncons] swoncat // s [uncons [P] dip cons dureco] cons dureco ; ; exe-t // N [P] => [[N [I] [T] [E] ifte] ..] [dip dureco] cons // N [[P] dip dureco] [[pred] infra] swoncat // N [[pred] infra [P] dip dureco] [ifte] cons // N [[E] ifte] [pop [[duco] duco]] swons // N [[pop [[duco] duco] [E] ifte] [first null] swons // N [[first null] [T] [E] ifte] cons dureco ; // [[N [I] [T] [E] ifte] ..] ; fix [duco] swoncat duco ; ; fix-c [0 [succ] infra dureco] swoncat dureco ; ; fix-i // [P] s [I] [dip cons dureco] cons // [P] s [[I] dip cons dureco] [uncons] swoncat // [P] s [uncons [I] dip cons dureco] cons // [P] [s uncons [I] dip cons dureco] swoncat // [s uncons [I] dip cons dureco P] dureco ; ; fix-a [] [[cons] unary] fix-i ; ; _expand // [I] [T] [R1] [R2] [r] ==> // [ [pop I] [[T] dip] [[R1] dip r [R2] dip] ifte ] swap // [I] [T] [R1] [r] [R2] [dip] cons // .. .. .. .. [[R2] dip] concat // .. .. .. [r [R2] dip] [dip] swoncat // .. .. .. [dip r [R2] dip] cons // .. .. [[R1] dip r [R2] dip] [ [dip] cons // .. [[T] dip] .. [ [pop] swoncat] dip ] // [pop [I]] .. .. dip [ifte] cons cons cons ; // [ .. .. .. ifte ] ; linear [i] _expand ; ; binary [dip swap i] _expand ; // examples ; squaring [dup *] exe ;