From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id UAA03212 for caml-red; Thu, 8 Feb 2001 20:02:14 +0100 (MET) Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id NAA01056 for ; Thu, 8 Feb 2001 13:50:38 +0100 (MET) Received: from mercury.optrak.co.uk ([193.82.56.54]) by concorde.inria.fr (8.11.1/8.10.0) with ESMTP id f18CobX25425 for ; Thu, 8 Feb 2001 13:50:37 +0100 (MET) Received: by mercury.optrak.co.uk with Internet Mail Service (5.5.1960.3) id <1PQ8W11J>; Thu, 8 Feb 2001 12:50:39 -0000 Message-ID: <30273167BD5AD111A5AD00A0C992201725868D@mercury.optrak.co.uk> From: Serguei Ouklonski To: caml-list@inria.fr Subject: Optional arguments Date: Thu, 8 Feb 2001 12:50:37 -0000 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.1960.3) Content-Type: text/plain Sender: weis@pauillac.inria.fr Hi, Example1: let fn1 a:string (?b = "") = (String.length a) + (String.length b) let x = fn1 "test" result is function Example2: let fn1 (?a = "") b:string = (String.length a) + (String.length b) let x = fn1 "test" result is 4 (number) It seems that in both cases result should be 4. Have I missed something from OCaml docs? Regards Serguei Ouklonski From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA32251 for caml-red; Fri, 9 Feb 2001 10:45:28 +0100 (MET) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id CAA30985 for ; Fri, 9 Feb 2001 02:20:10 +0100 (MET) Received: from kurims.kurims.kyoto-u.ac.jp (kurims.kurims.kyoto-u.ac.jp [130.54.16.1]) by nez-perce.inria.fr (8.11.1/8.10.0) with ESMTP id f191K8H11021 for ; Fri, 9 Feb 2001 02:20:09 +0100 (MET) Received: from localhost (mikan.kurims.kyoto-u.ac.jp [130.54.16.202]) by kurims.kurims.kyoto-u.ac.jp (8.9.3/3.7W) with ESMTP id KAA23885; Fri, 9 Feb 2001 10:19:57 +0900 (JST) To: Sergeiu@optrak.co.uk Cc: caml-list@inria.fr Subject: Re: Optional arguments In-Reply-To: <30273167BD5AD111A5AD00A0C992201725868D@mercury.optrak.co.uk> References: <30273167BD5AD111A5AD00A0C992201725868D@mercury.optrak.co.uk> X-Mailer: Mew version 1.94.2 on Emacs 20.7 / Mule 4.0 (HANANOEN) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20010209101957N.garrigue@kurims.kyoto-u.ac.jp> Date: Fri, 09 Feb 2001 10:19:57 +0900 From: Jacques Garrigue X-Dispatcher: imput version 20000228(IM140) Sender: weis@pauillac.inria.fr From: Serguei Ouklonski > Example1: > > let fn1 a:string (?b = "") = (String.length a) + (String.length b) > > let x = fn1 "test" > > result is function > > Example2: > > let fn1 (?a = "") b:string = (String.length a) + (String.length b) > > let x = fn1 "test" > > result is 4 (number) > > It seems that in both cases result should be 4. > > Have I missed something from OCaml docs? Optional arguments are discarded when you apply a functions to a non-labelled argument _appearing after them_ in the function's type. So in your example, since a is taken before b, b will not be discarded. Since there is no way to discard b in this, the compiler warns you: # let fn1 a ?(b = "") = String.length a + String.length b;; Warning: This optional argument cannot be erased val fn1 : string -> ?b:string -> int = Regards, Jacques Garrigue --------------------------------------------------------------------------- Jacques Garrigue Kyoto University garrigue at kurims.kyoto-u.ac.jp JG From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.3 required=5.0 tests=AWL,DNS_FROM_SECURITYSAGE, MAILTO_TO_SPAM_ADDR autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by yquem.inria.fr (Postfix) with ESMTP id 20920BB84 for ; Sun, 9 Nov 2008 20:17:41 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmYFAMnFFknAXQIngWdsb2JhbACBdopYAYdSAQEWIqldiiSDWA X-IronPort-AV: E=Sophos;i="4.33,569,1220220000"; d="scan'208";a="19771712" Received: from concorde.inria.fr ([192.93.2.39]) by mail1-smtp-roc.national.inria.fr with ESMTP; 09 Nov 2008 20:17:40 +0100 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id mA9JHeMu032370 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Sun, 9 Nov 2008 20:17:40 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmATAMnFFklN6B+lU2dsb2JhbACBdopYAYdIARYKCQYSqV+KJINY X-IronPort-AV: E=Sophos;i="4.33,569,1220220000"; d="scan'208";a="31295710" Received: from fe02x03-cgp.akado.ru (HELO akado.ru) ([77.232.31.165]) by mail4-smtp-sop.national.inria.fr with ESMTP; 09 Nov 2008 20:17:39 +0100 Received: from [10.0.66.9] ([10.0.66.9] verified) by fe02-cgp.akado.ru (CommuniGate Pro SMTP 5.1.16) with ESMTPS id 36351195 for caml-list@inria.fr; Sun, 09 Nov 2008 22:17:37 +0300 Date: Sun, 9 Nov 2008 22:17:47 +0300 (MSK) From: malc X-X-Sender: malc@linmac.oyster.ru To: caml-list@inria.fr Subject: Optional arguments Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Miltered: at concorde with ID 49173754.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; malc:01 val:01 int:01 int:01 caml:02 objective:02 unit:03 let:03 let:03 perhaps:05 arguments:07 fun:08 optional:09 version:13 print:13 Objective Caml version 3.10.0 # let a i = let b ?(i=i mod 3) () = i in b ~i ();; val a : int -> int = # for i = 0 to 5 do print_int (a i); done;; 012345- : unit = () Is this something to be expected? Or perhaps something which calls for an upgrade? -- mailto:av1474@comtv.ru