Received: from mx0.gmx.net (mx0.gmx.net [213.165.64.100]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with SMTP id p9QB3GFx011795 for ; Wed, 26 Oct 2011 13:03:17 +0200 Received: (qmail 782 invoked by alias); 26 Oct 2011 11:03:11 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 26 Oct 2011 11:03:10 -0000 Received: from relay2.uni-heidelberg.de (EHLO relay2.uni-heidelberg.de) [129.206.210.211] by mx0.gmx.net (mx029) with SMTP; 26 Oct 2011 13:03:10 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id p9QAxL4k008539 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 26 Oct 2011 12:59:21 +0200 Received: from listserv.uni-heidelberg.de (localhost.localdomain [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p9QA7HEw030285; Wed, 26 Oct 2011 12:59:21 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 1895768 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Wed, 26 Oct 2011 12:59:21 +0200 Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.210.211]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p9QAxLtM025858 for ; Wed, 26 Oct 2011 12:59:21 +0200 Received: from mail-fx0-f49.google.com (mail-fx0-f49.google.com [209.85.161.49]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id p9QAxGCd008515 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=FAIL) for ; Wed, 26 Oct 2011 12:59:20 +0200 Received: by faaf16 with SMTP id f16so2245245faa.22 for ; Wed, 26 Oct 2011 03:59:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.61.138 with SMTP id t10mr43376461fah.20.1319626756690; Wed, 26 Oct 2011 03:59:16 -0700 (PDT) Received: by 10.152.4.193 with HTTP; Wed, 26 Oct 2011 03:59:16 -0700 (PDT) References: <4EA7DB88.7020906@residenset.net> Content-Type: text/plain; charset=ISO-8859-1 X-Spam-Whitelist: Message-ID: Date: Wed, 26 Oct 2011 06:59:16 -0400 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Bruno Le Floch Subject: Re: S combinator and such To: LATEX-L@listserv.uni-heidelberg.de In-Reply-To: <4EA7DB88.7020906@residenset.net> Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (BackTrace mail analyze); Detail=5D7Q89H36p4L00VTXC6D4q0N+AH0PUCnGL2vqOgpaBYL16oitsMrgDt/NQNpSCZFFjDOy 97xb7Zpf+wZnd5ZXNcvLDXR3Wg3wRjdQbwEMh8=V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de Status: R X-Status: X-Keywords: X-UID: 6956 Hello Lars, First, sorry for the delay on the other thread about Church booleans. Quite a lot of things cropped up in parallel these days. (And I personally have more non-LaTeX things to do than expected.) It is not forgotten. Inasmuch as I like the Church boolean idea, my first reaction to combinatory logic is "why would we need this in (La)TeX?" I have to admit, though, that I never studied lambda calculus carefully enough to understand any practical use for it (the only course I took that used it mostly mentionned category theory and Yoneda's lemma). > much easier to understand when one transcribes the whole thing into LaTeX > macros. :-) I can imagine that to be true, given the paper that David already mentionned earlier in the thread. > My thought with this mail is mainly to ask whether there are any more of > these (or other standard combinators) that are defined in LaTeX3 already. No. Most often, the cases where those kinds of macros are useful in LaTeX are when you try to control expansion, and that's taken care of by the l3expan module. Maybe some of the functions from that module look a little bit like that (not quite, though). > I seem to recall some discussion to the effect that the C combinator might be > named \use_i_biii_bii:nnn, but I haven't seen any occurrence in the source > of such _bii_ names (then again, maybe I'm not looking close enough). There was such a discussion. I think I was the one to use that in some code I submitted to the scrutiny of LaTeX-L a few months ago. The code itself got refactored in a much cleaner way (IIRC, that's the ancestor of the \tl_act... family of expandable functions). That particular naming scheme is not used currently. However, I have to admit that I introduced and removed \use_i_bii:nn #1#2->#1{#2} a couple of times when coding the (future) floating point module. It might still be floating around there. > Continuing such a naming scheme, one would arrive at maybe > > \use_i_biibiii:nnn for the B combinator > \use_i_biii_biibiii:nnn for the S combinator > > which does not seem entirely practical... I agree, both with what the names could naturally be, and with the fact that it is totally unpractical. A better choice is ad-hoc names such as \combinator_S:nnn. After all, that's how other people call it, not "Apply 1st to 3rd to 2nd applied to 3rd" ("A1t3t2at3"?). In general, a function which does complicated things to its argument should probably get a name specific to the module which uses it. In the floating point module I definitely have functions such as #1#2#3#4#5#6#7#8 -> {#1#2#3#4}{#5#6#7#8} which I won't call \use_B_i_ii_iii_iv_E_B_v_vi_vii_viii_E:nnnnnnnn, but rather \fp_aux_brace_iv_iv:nnnnnnnn, or something like that. > the primary intent for which is that #1{#4} should behave as a Church > boolean, and thus select whether to apply #2 or #3 to the second #4. I > suspect \Lift, \Twiddle, \Compose, and maybe some additional macro could be > combined into an S combinator, but it is not immediately clear to me how. I don't have enough lambda background to figure that one out (and I've still got a few things to change in l3regex before I leave for two weeks). > three years was a lot of time in TeX history, back then. It still is. The engines themselves change, nowadays :). > Somewhat relatedly, it occurs to me that the process of converting > lambda-terms to combinator formulae /might/ be the beginning of an approach > to having "named command parameters" in (high-level) LaTeX without radical > modifications of the TeX engine -- the idea being that the named parameters > are (upon macro definition) removed from the replacement text as a matter of > lambda elimination (conversion of a lambda term to an equivalent > combinatorial term). Whether that would be practical is of course an > entirely different matter. ;-) Care to elaborate?? I can write a fully robust, but entirely unpratical, conversion from named parameters to numbered parameters: pass the definition through ted.sty (or some adaptation thereof). Locate all #. Read the corresponding names. Convert to digits. Build the token list back (that piece is easy, see l3trial/cs-input/cs-input.dtx). For more than 9 arguments, things are harder, but also feasible. I'd argue, though, that it is useless. If you want named parameters, key-value input is much more powerful. Regards, Bruno