TXR Lisp:
Warmup: é só pegar a estrutura de dados primeiro:
$ txr -p '(comb (get-lines (open-files *args*)) 2)' file1 file2 file3
(("one" "two") ("one" "three") ("one" "four") ("one" "five") ("one" "six")
("two" "three") ("two" "four") ("two" "five") ("two" "six") ("three" "four")
("three" "five") ("three" "six") ("four" "five") ("four" "six")
("five" "six"))
Agora é só uma questão de obter o formato de saída correto. Se catenarmos os pares juntos e, em seguida, usarmos tprint
(implicitamente via a opção -t
), estaremos lá.
Primeiro, a catenação via mapeamento através de cat-str
:
$ txr -p '[mapcar cat-str (comb (get-lines (open-files *args*)) 2)]' file1 file2 file3
("onetwo" "onethree" "onefour" "onefive" "onesix" "twothree" "twofour"
"twofive" "twosix" "threefour" "threefive" "threesix" "fourfive"
"foursix" "fivesix")
OK, temos os dados certos. Agora é só usar tprint
function ( -t
) em vez de prinl
( -p
):
$ txr -t '[mapcar cat-str (comb (get-lines (open-files *args*)) 2)]' file1 file2 file3
onetwo
onethree
onefour
onefive
onesix
twothree
twofour
twofive
twosix
threefour
threefive
threesix
fourfive
foursix
fivesix
Por fim, lemos a pergunta novamente e fazemos permutações em vez de combinações com perm
em vez de comb
, conforme necessário:
$ txr -t '[mapcar cat-str (perm (get-lines (open-files *args*)) 2)]' file1 file2 file3
onetwo
onethree
onefour
onefive
onesix
twoone
twothree
twofour
twofive
twosix
threeone
threetwo
threefour
threefive
threesix
fourone
fourtwo
fourthree
fourfive
foursix
fiveone
fivetwo
fivethree
fivefour
fivesix
sixone
sixtwo
sixthree
sixfour
sixfive