33 lines
824 B
Plaintext
33 lines
824 B
Plaintext
# -*- coding: utf-8 -*- #
|
|
|
|
COMMENT REQUIRED BY "prelude_combinations_generative.a68"
|
|
MODE COMBDATA = ~;
|
|
PROVIDES:
|
|
# COMBDATA*=~* #
|
|
# comb*=~ list* #
|
|
END COMMENT
|
|
|
|
MODE COMBDATALIST = REF[]COMBDATA;
|
|
MODE COMBDATALISTYIELD = PROC(COMBDATALIST)VOID;
|
|
|
|
PROC comb gen combinations = (INT m, COMBDATALIST list, COMBDATALISTYIELD yield)VOID:(
|
|
CASE m IN
|
|
# case 1: transpose list #
|
|
FOR i TO UPB list DO yield(list[i]) OD
|
|
OUT
|
|
[m + LWB list - 1]COMBDATA out;
|
|
INT index out := 1;
|
|
FOR i TO UPB list DO
|
|
COMBDATA first = list[i];
|
|
# FOR COMBDATALIST sub recombination IN # comb gen combinations(m - 1, list[i+1:] #) DO (#,
|
|
## (COMBDATALIST sub recombination)VOID:(
|
|
out[LWB list ] := first;
|
|
out[LWB list+1:] := sub recombination;
|
|
yield(out)
|
|
# OD #))
|
|
OD
|
|
ESAC
|
|
);
|
|
|
|
SKIP
|