( ( fold = f xs init first rest . !arg:(?f.?xs.?init) & ( !xs:&!init | !xs:%?first ?rest & !f$(!first.fold$(!f.!rest.!init)) ) ) & out $ ( fold $ ( (=a b.!arg:(?a.?b)&!a+!b) . 1 2 3 4 5 . 0 ) ) & (product=a b.!arg:(?a.?b)&!a*!b) & out$(fold$(product.1 2 3 4 5.1)) );