# По зададено от командния ред число k програмата намира редицата от k-те # степени на естествените числа, използвайки само операцията събиране, # по схемата на А. Мьоснер. # Например при k = 4 може да се започне с редицата от естествените числа, # в която „задраскано“ е всяко 4-то число. От нея образуваме редица, която # започва също с 1, а всяко следващо число е сбор на съседите му отляво и # отгоре. В тази редица задраскваме всяко 3-о число. Следващата редица се # образува по същия начин от горната, а в нея задраскваме всяко 2-о число. # Накрая все така образуваме и последната редица, която е и търсената. # Още по-удобно е още първата редица, от естествените числа, да се образува # от редицата само от 1-ци по същото правило: за еднообразие можем да приемем, # че в тази 0-ва редица се задрасква всяко k+1-о число. # # 0: 1 1 1 1 1 1 1 1 1 1 1 1 1 ... # 1: 1 2 3 4 5 6 7 8 9 10 11 12 13 ... # 2: 1 3 6 11 17 24 33 43 54 67 ... # 3: 1 4 15 32 65 108 175 ... # 4: 1 16 81 256 ... # Приема цяло положително число от командния ред, повиквайки powers образува # съизраз за пресмятане на редицата от степени, поражда и отпечатва два къса # от тази редица. procedure main(a) x := powers(a[1]) every writes(|@x,' ') \20 write("\n ...plus...") every writes(|@x,' ') \10 write() end # По зададено k образува k+1 последователно свързани съизраза, по един за # всяка числова редица. Всяка от редиците, освен тази от единици, се поражда # от съответен екземпляр (повикване) на процедурата xfrmseq, от който е # образуван съизраз. Резултатът от повикването на powers е последният от # тези съизрази – той поражда търсената редица. procedure powers(k) p := create |1 every i := k+1 to 2 by -1 do p := create xfrmseq(p,i) return p end # От редицата, пораждана от съизраза s, образува следващата редица. Всяко m-о # поред прието от s число се пропуска („задрасква се“). Всяко породено число # се предава съпрограмно (чрез suspend) на повикващия. procedure xfrmseq(s,m) t := 0 every |(i := 1 to m) do {tt := @s; if i~=m then suspend t +:= tt} end