// define your Function
// LR operator precedence
f = { |a, b| a + b * a * b % 8 };
// List Comprehension for getting pairs
x = all {:[a, b], a <- (1..8), b <- (1..8) }.collect(f);
// use Patterns with default instrument for quick test
(
Pbind(
\dur, Pseq(x).collect(_[0]) / 16, // partial application syntax, getting numbers from pairs
\note, Pseq(x).collect(_[1])
).play
)

Rethinking this, it’s probably not quite what you have done, as I get it now, you took the tuples to generate a sequence of numbers. Of course the mapping is still open here.

// define your Function
// LR operator precedence
f = { |a, b| a + b * a * b % 8 };
// List Comprehension for getting pairs
x = all {:[a, b], a <- (1..8), b <- (1..8) }.collect(f.(*_));
x.plot
// use Patterns with default instrument for quick test
(
Pbind(
\dur, 0.2,
\note, Pseq(x)
).play
)