A list comprehension is a special syntax in some programming languages to describe lists. It is similar to the way mathematicians describe sets, with a set comprehension, hence the name.

Some attributes of a list comprehension are:

 They should be distinct from (nested) for loops and the use of map and filter functions within the syntax of the language.
 They should return either a list or an iterator (something that returns successive members of a collection, in order).
 The syntax has parts corresponding to that of set-builder notation. 


Task

Write a list comprehension that builds the list of all Pythagorean triples with elements between   1   and   n.

If the language has multiple ways for expressing such a construct (for example, direct list comprehensions and generators), write one example for each.




 
  :?py                         { Initialize the accumulating result list. }
& (     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20   { This is the subject }
    :   ?                      { Here starts the pattern }
        %@?x
        ?
        %@?y
        ?
        %@?z
        ( ?
        & -1*!z^2+!x^2+!y^2:0
        & (!x,!y,!z) !py:?py
        & ~                    { This 'failure' expression forces backtracking }
        )                      { Here ends the pattern }
  | out$!py                    { You get here when backtracking has 
                                 exhausted all combinations of x, y and z }
  );