From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.devel Subject: Re: Why is FUNC in cl-callf not allowed to be an expression? Date: Wed, 15 May 2019 01:32:53 +0200 Message-ID: <87mujohasa.fsf@web.de> References: <874l631ek1.fsf@web.de> <87pnoqtuhm.fsf@web.de> <87r2961gox.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="101988"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed May 15 01:33:11 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hQgv0-000QP6-Pd for ged-emacs-devel@m.gmane.org; Wed, 15 May 2019 01:33:10 +0200 Original-Received: from localhost ([127.0.0.1]:56437 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hQguz-0004Zo-NY for ged-emacs-devel@m.gmane.org; Tue, 14 May 2019 19:33:09 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:39358) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hQgut-0004Zd-Tu for emacs-devel@gnu.org; Tue, 14 May 2019 19:33:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hQgut-0002rJ-20 for emacs-devel@gnu.org; Tue, 14 May 2019 19:33:03 -0400 Original-Received: from mout.web.de ([212.227.17.12]:60215) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hQgus-0002lW-Nx for emacs-devel@gnu.org; Tue, 14 May 2019 19:33:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1557876775; bh=1K04xDu2OC9bVI/GyMkO2APcX3BDLCEDcbHn6ZG84+Q=; h=X-UI-Sender-Class:From:To:Cc:Subject:References:Date:In-Reply-To; b=Iv6DcP0WVEglR1pV5l3adAMClTFCxXydkIJYDInxygFkzVYXLOaTqc2ZMlOlDK9/z 37PfsOp/GCRAL8Kls9jN96NeseNkqZPFtVQbqm8YahHcnRP8f5LqGghrOfTyydIU7+ 6XeShWRHla0bub257YB/LuWGEpCJ8Qz2XKuuz3RI= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Original-Received: from drachen.dragon ([188.110.143.34]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0Lrruc-1ghAAD0SAI-013eyL; Wed, 15 May 2019 01:32:55 +0200 In-Reply-To: (Stefan Monnier's message of "Mon, 13 May 2019 12:47:16 -0400") X-Provags-ID: V03:K1:/b1WWkE97S4n1OzbmTU5H3J9rwbqgL63ZZ/fJd0JhnOE0IykFVI 2mRXbateEdaUwQFsOoqn8z5xX4wmnztF8SwuPvvxKVtzD0gt3zqzKOIuS0i6bhWwZGd06uo 3ODOrnIjjCMWsorrnh26B+2E7a1npfLrATSXsh81D8lD1McJ7a+Xf4BsjoWz//ExMas6pzA /QcI0e3KY8Ukr62NrEpQg== X-UI-Out-Filterresults: notjunk:1;V03:K0:EUlcM2z74sc=:mHdJWHTkNRouisstLI2bJO 9THeU4ygAsAVO9YFokJ9LM/+k7JSHy0DWsILbb6HmQUxLl03UVb7gg+67zskhDQN6pG0ljrzy H5cMyTb/xwcLlnL6pEC6IP0um8y8vf0U4jeQwBk51y07m1kA1JGZP0ayegcxZPd+iKrQmEWvH XBouQkI/yIaQB6z3FcFS5SQlL/KW7C1LgZyNtYbS9dk/t6iDgF9OTBqIvHt8E4lq3t7G4+rqo hPHXyzpNuBbv4jytvobzkPIrIdC1fPfhF53hyWJs2nSF7W5suil75CmeYoZUrYp84cwnXsWZn sLo5ONau8Zn4wz078JCw7XHVgB7Sro5+wMXqJZmq+qJkL0vodNSCRHYlkY0XBITrtsl3bCgt0 wk03CuFXsawnMxEi9o6N41eXKVVnIc1Gw6WcZkCsP5eJwUaMQaKJX1NVxTsTWDqvAlQ/yRwSI 0MRTpPA1gGzwzQN2tvcRXiaV8xCtQDzCsid3SjVILtSxmNJdlpMj3OCJP2a8Q+X+FpljonEQm apkddYeFUCIxEgxDkkna7pwCq/Ecztl0g8jXsCGBG4Clia5CKgsyiGl6mtxHvO1rcdkuXhQfr yA/RZQkEBTaGCutrEL9Kl3v6AF53d2bXyOnX7TL7Niz/8n7Z09zRzyZMXmT2JdVPJ2sL8I2Yo yKhMrtcbO9kcXl76jB6lMAaZJbaTU+Fdh3e3XTraCtnJi76NUN0KmBR4SGYcZOFXX5T0zCZWZ 0wQHRUZae0nQX12vBm3c8A947XqnoDJPjrF+doBMem1g2ozzasJfY3KUDzS1XSJlR8xwSbNb X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.17.12 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:236524 Archived-At: Stefan Monnier writes: > > (defmacro gv-modify (binding call) Here is another idea: (defmacro gv-with-place (place f) (declare (indent 1)) (gv-letplace (getter setter) place (let ((v (make-symbol "v"))) `(funcall ,f ,getter (lambda (,v) ,(funcall setter v)))))) Example: (let ((x '((a)))) (gv-with-place (car x) (lambda (v set) (funcall set (append '(1 2) v '(3 4))))) x) => ((1 2 a 3 4)) The usage looks a bit longer than in all other proposals, but I find it cleaner. It's also more general, you can e.g. make setting conditional as in your (commented) `gv-pushnew!'. The second arg of `gv-with-place' being a function also gives a chance for factoring. More function calls at run time involved, though. I see that the suggestion comes near to just use `gv-letplace' in the first place, but I think it's easier to understand for the end programmer. Michael.