here is some sample code using sets

// find all the numbers < 10 whose squares are the sum of two primes
begin
  var primes = (2, 3, 5, 7, 11, 13, 17, 19, 
    23, 29, 31, 37, 41, 43, 47, 
    53, 59, 61, 67, 71, 73, 79, 
    83, 89, 97 )
  ;
  var squares = (1,4,9,16,25,36,49,64,81,100);
  var primepairs = {x,y : int * int | x \in primes and y \in primes};
  //var sumissquare = {i,j: int^2 |  i + j \in squares };
  fun sum (i:int, j:int) => i + j;
  var sumissquare = invimg (sum, squares);
  var square_sum_of_primes = sumissquare \cap primepairs;

  for var i in 1 upto 100 do
  for var j in i upto 100 do
     if (i,j) \in square_sum_of_primes do
       println$ (i+j).str + "="+i.str+"+"+j.str;
     done 
  done
  done
end

Now, the thing to note here is that the kind of sets we have here
are just fancy predicates.  We can form the conjunction of two 
predicates like this:

        fun (x:int) => P x and Q x

so what's the big deal with sets? 

Well, you don't need the "fun" binder to compose them

        { x:int | P x } \cap { y:int | Q y }


In fact I'm going to implement this:

        P and Q

as well :)

--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to