1) permutations on sentences {script var S_perm = function(a) { if (a.length < 2) return [a]; var b = []; for (var c = 0; c < a.length; c++) { var e = a.splice(c, 1), f = S_perm(a); for (var d = 0; d < f.length; d++) b.push( e.concat( f[d]) ); a.splice(c, 0, e[0]) } return b } LAMBDATALK.DICT['S.perm'] = function() { // {S.perm 1 2 3} return S_perm( arguments[0].trim() .split(" ") ) .join(" ") .replace(/\s/g,"{br}") }; } {S.perm 1 2 3} -> 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 {S.perm hello brave world} -> hello,brave,world hello,world,brave brave,hello,world brave,world,hello world,hello,brave world,brave,hello 2) permutations on words {script var W_perm = function(word) { if (word.length === 1) return [word] var results = []; for (var i = 0; i < word.length; i++) { var buti = W_perm( word.substring(0, i) + word.substring(i + 1) ); for (var j = 0; j < buti.length; j++) results.push(word[i] + buti[j]); } return results; }; LAMBDATALK.DICT['W.perm'] = function() { // {W.perm 123} return W_perm( arguments[0].trim() ).join("{br}") }; } {W.perm 123} -> 123 132 213 231 312 321