JSFiddle - React, Tailwind, and code Playground
JavaScript
var sets = [ [2,3,4,5], ['sweet','ugly'], ['cats','dogs','hogs'] ];
lazyProduct( sets, holla );
document.close();
function holla( n, adj, noun ){
document.write( [n,adj,noun].join(' ')+"<br>" );
}
function lazyProduct(arrays,callback,values){
if (!values) values=[];
var head = arrays[0], rest = arrays.slice(1), dive=rest.length>0;
for (var i=0,len=head.length;i<len;++i){
var moreValues = values.concat(head[i]);
if (dive) lazyProduct(rest,callback,moreValues);
else callback.apply(this,moreValues);
}
}