23 lines
777 B
Plaintext
23 lines
777 B
Plaintext
define(`for',
|
|
`ifelse($#, 0, ``$0'',
|
|
eval($2 <= $3), 1,
|
|
`pushdef(`$1', `$2')$4`'popdef(
|
|
`$1')$0(`$1', incr($2), $3, `$4')')')dnl
|
|
define(`nth',
|
|
`ifelse($1, 1, $2,
|
|
`nth(decr($1), shift(shift($@)))')')dnl
|
|
define(`range',
|
|
`for(`x', eval($1 + 2), eval($2 + 2),
|
|
`nth(x, $@)`'ifelse(x, eval($2+2), `', `,')')')dnl
|
|
define(`powerpart',
|
|
`{range(2, incr($1), $@)}`'ifelse(incr($1), $#, `',
|
|
`for(`x', eval($1+2), $#,
|
|
`,powerpart(incr($1), ifelse(
|
|
eval(2 <= ($1 + 1)), 1,
|
|
`range(2,incr($1), $@), ')`'nth(x, $@)`'ifelse(
|
|
eval((x + 1) <= $#),1,`,range(incr(x), $#, $@)'))')')')dnl
|
|
define(`powerset',
|
|
`{powerpart(0, substr(`$1', 1, eval(len(`$1') - 2)))}')dnl
|
|
dnl
|
|
powerset(`{a,b,c}')
|