From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 6EF9A7F75C for ; Sun, 7 Sep 2014 11:55:51 +0200 (CEST) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of besognet.remy@gmail.com) identity=pra; client-ip=209.85.217.177; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="besognet.remy@gmail.com"; x-sender="besognet.remy@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of besognet.remy@gmail.com designates 209.85.217.177 as permitted sender) identity=mailfrom; client-ip=209.85.217.177; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="besognet.remy@gmail.com"; x-sender="besognet.remy@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-lb0-f177.google.com) identity=helo; client-ip=209.85.217.177; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="besognet.remy@gmail.com"; x-sender="postmaster@mail-lb0-f177.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiIDAEErDFTRVdmxm2dsb2JhbAAYQYJHgRlXBIJ4sEeUPoFph0x8CBYQAQEBAQEGCwsJFCqEBAEBAwESEQQZAS0LAQMBCwEFAwILGh0CAiISAQUBChIGEwgKEIgMAwkIDYpFLZAqa4swhQKIbCcDCoZaAREBBQ6PO4MEgVMFhQoFkGGHAoFfkVsYKYFsgQ2CGjwvAYJOAQEB X-IPAS-Result: AiIDAEErDFTRVdmxm2dsb2JhbAAYQYJHgRlXBIJ4sEeUPoFph0x8CBYQAQEBAQEGCwsJFCqEBAEBAwESEQQZAS0LAQMBCwEFAwILGh0CAiISAQUBChIGEwgKEIgMAwkIDYpFLZAqa4swhQKIbCcDCoZaAREBBQ6PO4MEgVMFhQoFkGGHAoFfkVsYKYFsgQ2CGjwvAYJOAQEB X-IronPort-AV: E=Sophos;i="5.04,481,1406584800"; d="scan'208";a="93379096" Received: from mail-lb0-f177.google.com ([209.85.217.177]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 07 Sep 2014 11:55:50 +0200 Received: by mail-lb0-f177.google.com with SMTP id l4so2812524lbv.8 for ; Sun, 07 Sep 2014 02:55:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=MaoLtDPas4bHLsZqCyLz3SCVnXF/3o8uHjdIuaWkiNo=; b=ZdnAHBVT3aRF4mzk4GLzHNTSofKO0+kCl/UXPUp16x9WuB8GIVNpLJkmNjN4Um35Ig t81lksGUXRO4+Kk6otcgWXcI6QPIh3yCiM4A5ARxV4PSlCjbd9XYOrqniWOmgCNm+3FG n3e+1O1HRuK9JCvCsyl0nl86BiL6sOCyTjztrwFCQeMRndSfwrSGu2JNnUyDHL2LRPCx aQYJUk9mZ9j6/ShJYeX8fMqi5DJ/dhWYHb46De5+QKfGX8/DkO1GDuTsyJYBduXtKVha kJ3g4KSmWRrJ1Guf2E+5gJt/+ID4upRVntNDd189Vm4xMzLXTq+52rQs/xxNuCkDE+at zdFQ== X-Received: by 10.152.42.209 with SMTP id q17mr22252691lal.13.1410083749635; Sun, 07 Sep 2014 02:55:49 -0700 (PDT) MIME-Version: 1.0 Sender: besognet.remy@gmail.com Received: by 10.112.74.234 with HTTP; Sun, 7 Sep 2014 02:55:29 -0700 (PDT) In-Reply-To: <91F16B653D20446DA42F7B673FD5509D@PCdejd> References: <91F16B653D20446DA42F7B673FD5509D@PCdejd> From: =?UTF-8?Q?R=C3=A9my_Besognet?= Date: Sun, 7 Sep 2014 10:55:29 +0100 X-Google-Sender-Auth: pWAs4LcxcGLLgll0aTJngjuAZh4 Message-ID: To: Jean-Denis Eiden Cc: caml-list@inria.fr Content-Type: multipart/alternative; boundary=001a11c34b6c002b89050276b545 Subject: Re: [Caml-list] listes qui bouclent --001a11c34b6c002b89050276b545 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Bonjour, Il me semble que seules les valeurs fonctionnelles sont autoris=C3=A9es =C3= =A0 droite d'un let-rec. La seule exception est un constructeur de type Effectivement, le "::" n'est pas un v=C3=A9ritable op=C3=A9rateur, mais bie= n un constructeur de type. Prenons le type : type 'a t =3D Empty | List of 'a * 'a t Si on fait : let cyclique n =3D let rec liste =3D List (1, liste) in liste;; =C3=A7a passe parce que List est bien un constructeur de type. Or dans : let cyclique n =3D let rec liste =3D (rep=C3=A8te n) @ liste in liste;; l'op=C3=A9rateur @ n'est pas un constructeur, mais bien un appel de fonctio= n qui lie le nom liste =C3=A0 l'appel et c'est pr=C3=A9cis=C3=A9ment ce que le co= mpilateur ne veut pas. Parce qu'il veut que la construction d'une valeur r=C3=A9cursif q= ui n'est ppas une fonction soit statique. Tu as le d=C3=A9tail dans le manuel d'Ocaml : http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#s%3aletrecvalues Cordialement, Le 7 septembre 2014 10:31, Jean-Denis Eiden a =C3=A9crit : > Bonjour =C3=A0 tous, > > CaML light permet la construction suivante : > > #let rec liste =3D 0::1::2::3::liste;; > liste : int list =3D > [0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; = 0; > 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; = 1; > 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; = 2; > 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; > ...] > > Cela =C3=A9tant, j'aimerais pouvoir faire la m=C3=AAme chose en param=C3= =A9trant la > p=C3=A9riode ; par exemple, j'aimerais cr=C3=A9er [ 0 ; 1 ; 2 ; ... ; n-1= ; 0 ; 1 ; 2 > ; ... ] : > > #let rep=C3=A8te n =3D let aux =3D ref [] in for i =3D n-1 downto 0 do au= x:=3D > i::(!aux) done; !aux;; > rep=C3=A8te : int -> int list =3D > > #let cyclique n =3D let aux =3D rep=C3=A8te n in let rec liste =3D aux @ = liste in > liste;; > > Mais l=C3=A0 : > > let cyclique n =3D let rec liste =3D (rep=C3=A8te n) @ liste in liste;; > >> ^^^^^^^ >> > Ce genre d'expressions n'est pas autoris=C3=A9 comme membre droit d'un "l= et > rec". > > Est-ce seulement un probl=C3=A8me de syntaxe ou bien y a-t-il impossibili= t=C3=A9 > absolue, la taille de la liste servant de p=C3=A9riode devant =C3=AAtre c= onnue =C3=A0 la > compilation ? > > Cordialement, Jean-Denis Eiden > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > --=20 *R=C3=A9my El Siba=C3=AFeEquipe APR, LIP6/IRILL, Universit=C3=A9 Pierre et = Marie Curie* --001a11c34b6c002b89050276b545 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Bonjour,

Il me semble que seules = les valeurs fonctionnelles sont autoris=C3=A9es =C3=A0 droite d'un let-= rec.
La seule exception est un constructeur de type

Effectivement, le "::" n'est pas un v=C3=A9ritable op= =C3=A9rateur, mais bien un constructeur de type.

P= renons le type :=C2=A0

type 'a t =3D Empty | List of =C2=A0'a * 'a t=

Si on fait :=C2=A0

let cycliqu= e n =3D let rec liste =3D List (1, liste) in= liste;;

=C3=A7a passe parce que List est bien un const= ructeur de type. Or dans :=C2=A0

let cyclique n =3D let r= ec liste =3D (rep=C3=A8te n) @ liste in liste;;

= l'op=C3=A9rateur @ n'est pas un co= nstructeur, mais bien un appel de fonction qui lie le nom liste =C3=A0 l= 9;appel et c'est pr=C3=A9cis=C3=A9ment ce que le compilateur ne veut pa= s. Parce qu'il veut que la construction d'une valeur r=C3=A9cursif = qui n'est ppas une fonction soit statique.

Tu as le d=C3=A9tail dans le manuel d'Oca= ml :=C2=A0http://caml.inria.= fr/pub/docs/manual-ocaml/extn.html#s%3aletrecvalues

=
Cordialement,



Le 7 septem= bre 2014 10:31, Jean-Denis Eiden <jean-denis.eiden@orange.fr&= gt; a =C3=A9crit :
Bonjour =C3=A0 = tous,

CaML light permet la construction suivante :

#let rec liste =3D 0::1::2::3::liste;;
liste : int list =3D
[0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0;=
=C2=A01; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; = 0; 1;
=C2=A02; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; = 1; 2;
=C2=A03; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1; = 2;
=C2=A0...]

Cela =C3=A9tant, j'aimerais pouvoir faire la m=C3=AAme chose en param= =C3=A9trant la p=C3=A9riode ; par exemple, j'aimerais cr=C3=A9er [ 0 ; = 1 ; 2 ; ... ; n-1 ; 0 ; 1 ; 2 ; ... ] :

#let rep=C3=A8te n =3D let aux =3D ref [] in for i =3D n-1 downto 0 do aux:= =3D i::(!aux) done; !aux;;
rep=C3=A8te : int -> int list =3D <fun>

#let cyclique n =3D let aux =3D rep=C3=A8te n in let rec liste =3D aux @ li= ste in liste;;

Mais l=C3=A0 :

let cyclique n =3D let rec liste =3D (rep=C3=A8te n) @ liste in liste;;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^= ^^^^^^
Ce genre d'expressions n'est pas autoris=C3=A9 comme membre droit d= 'un "let rec".

Est-ce seulement un probl=C3=A8me de syntaxe ou bien y a-t-il impossibilit= =C3=A9 absolue, la taille de la liste servant de p=C3=A9riode devant =C3=AA= tre connue =C3=A0 la compilation ?

Cordialement, Jean-Denis Eiden


--
Caml-list mailing list.=C2=A0 Subscription management and archives:
ht= tps://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners<= /a>
Bug reports:
http://caml.inria.fr/bin/caml-bugs



--
R=C3=A9my El Sib= a=C3=AFe
Equipe APR, LIP6/IRILL, Universit=C3=A9 Pierre et Marie= Curie
--001a11c34b6c002b89050276b545--