Food for thought, a few non-junction solutions: On 10/22/2010 06:16 AM, Damian Conway wrote: > # Find the list of common elements in two lists... > sub intersection (@list1, @list2) { > (any(@list1) & any(@list2).eigenstates; > }
sub intersection(@list1, @list2) { uniq gather for @list1 X @list2 -> $a, $b { take $a if $a eqv $b } } or sub interseection(@list1, @list2) { (@list1 X=> @list2).grep({ .key eqv .value})>>.key.uniq } Admittedly it's not as declarative, but it's explicit about the comparison used (which is a plus, in my eyes). If you want to use eq or ===, hash based solutions come to mind too. > # Find the factors of a number... > sub factors (Num $n) { > ( $n/any(1..$n) ).eigenstates.grep({ $^q.Int == $q }); > } sub factors($n) { ($n X/ 1..$n).grep: { .Int == $_ } } or sub factors($n) { (1..$n).grep: { %n %% $_ } } > # Check for an unacceptable password, and list all when warning... > constant UNACCEPTABLE = any < Godel Escher Bart etc... >; > > if $passwd ~~ UNACCEPTABLE { > say "Unacceptable password. Don't use any of these:"; > say UNACCEPTABLE.eigenstates¬».fmt("\t%s\n"); > } constant UNACCETABLE = <Godel Escher Bach>; if $passwd ~~ any UNCACCEPTABLE { say "Unacceptable password. Don't use any of these:"; say UNACCEPTABLE».fmt("\t%s\n"); }