Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] newbie questions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Damien Doligez <Damien.Doligez@i...>
Subject: Re: [Caml-list] newbie questions
On Saturday, March 29, 2003, at 09:48 AM, Dr.Dr.Ruediger M.Flaig wrote:

> let ht x = (String.sub x 1 ((String.length x)-1)), String.make 1 
> (compl x.[0]);;

Any program that uses this function is going to be horribly inefficient.
You should do something like this instead:

let string_map f s =
   let result = String.copy s in
   for i = 0 to (String.length s - 1) do
     result.[i] <- f s.[i];
   done;
   result
;;

let compl = function 'g' -> 'c' | 'c' -> 'g' | 'a' -> 't'
                    | 't' -> 'a' | _ -> ' ';;

let complement s = string_map compl s;;

This should be able to handle the complete human genome (a 3 gigabyte 
string)
without problems (on a 64-bit machine with enough memory).


> 2.: A question on language design: why do recursive functions have to 
> be marked explicitly as such? My personal feeling is that this rather 
> spoils the nifty inference system... from Algol to Java, procedural 
> compilers require explicit type definitions but are able to work out 
> for themselves if a routine is recursive,

All these language have different syntax for defining 
functions/procedures
and for defining values, and make functions implicitly recursive.  In 
effect,
you are "marking" your functions as recursive by defining them.  You can
get the same effect in O'Caml by always using "let rec" for your 
functions.

>  and Haskell also has both type inference and implicit recursion, so 
> this should not be too difficult. Or has there anything escaped my 
> attention?

Haskell is a lazy language, and has no problem with arbitrary recursive
values.  In a strict language like O'Caml, we cannot make all values
recursive by default.


> hence I would like to have some output in legible form but the -S 
> option does not seem to work properly. Does anybody know about this?

Do you mean gcc -S or ocamlopt -S ?  They both work on my MacOS X.

-- Damien

-------------------
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