Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Easy solution in OCaml?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Shivkumar Chandrasekaran <shiv@e...>
Subject: Re: [Caml-list] Easy solution in OCaml?
Not quite, I think. How about:

  (* supplied by user *)
val is_nan : 'a -> bool
val add : 'a -> 'a -> 'a
val div : 'a -> 'a -> 'a
val from_int : int -> 'a
(* that's all from the user *)

let q_means is_nan add div from_int ms = function
   let sum a b c =
     let filter_nan n = if is_nan n then (from_int 0) else n in
     add (add (filter_nan a) (filter_nan b)) (filter_nan c)
   and cardinality a b c =
     let filter_nan n = if is_nan n then 0 else 1 in
     from_int ((filter_nan a) + (filter_nan b) + (filter_nan c)) in
   let rec qm ms = function
     a :: b :: c :: rest -> div (sum a b c) (cardinality a b c) :: qm 
rest
   | [] -> []
   | _ -> failwith "Malformed list" in
   qm ms

A good test case is: [-1;-1;-1]

--shiv--

On Monday, April 28, 2003, at 10:45 AM, malc wrote:

> On Fri, 25 Apr 2003, Siegfried Gonzi wrote:
>
>> Hi:
>>
>> First off: It is not homework. I am 29 and writing my PhD in physics.
>> Often I am contemplating whether it would be possible to use OCaml in
>> combination with my beloved Bigloo to perform statistical 
>> evaluations. I
>> am not sure whether there are any out there who /can/ do this
>> evaluations with OCaml what you normally would do with Matlab. The
>> problem what arises: type system and working against the compiler. In
>> Scheme changing a solution from lets say integer-array to double-array
>> is easy, but in Clean for example you would have to change all your
>> dependencies.
>> I often skim over the libraries and came to the conclusion: C, C++,
>> OCaml impossible for me to see any elegance; Clean a bit better;
>> Bigloo/Scheme: I am not sure here, because everything looks the same
>> maybe this is cheating, but I think it looks the most elegant and less
>> intimitating from all.
>>
>>
>> Rationale: given a list of 12 month.  I would like to calculate the
>> quarterly means and skip any nan. Easy? Yes it is but only on paper 
>> and
>> in Scheme:
>>
>> e.g: [1,2,4,-1,45,56,45,56,8]
>>
>> nan=-1.0
>>
>> result: [(1+2+3)/3, (45+56)/2, (45+56+8)/3]
>
> let nan = -1
>
> let mean a b c = (a + b + c) / 3
>
> let rec qmean = function
>     a :: b :: c :: rest -> mean a b c :: qmean rest
>   | [] -> []
>   | otherwise -> failwith "malformed list"
>
> let _ =
>   let months = [1; 2; 4; -1; 45; 56; 45; 56; 8] in
>   let denan = List.map (fun x -> if x = nan then 0 else x) months in
>   qmean denan
>
>
> -- 
> mailto:malc@pulsesoft.com
>
> -------------------
> To unsubscribe, mail caml-list-request@inria.fr Archives: 
> http://caml.inria.fr
> Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: 
> http://caml.inria.fr/FAQ/
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
>
--shiv--

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners