From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Kevin Rodgers Newsgroups: gmane.emacs.help Subject: Re: Calling different kinds of functions, which finish the same job Date: Tue, 11 Apr 2006 09:49:29 -0600 Message-ID: References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1144770699 3868 80.91.229.2 (11 Apr 2006 15:51:39 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 11 Apr 2006 15:51:39 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue Apr 11 17:51:38 2006 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1FTL95-0004um-OB for geh-help-gnu-emacs@m.gmane.org; Tue, 11 Apr 2006 17:51:12 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FTL94-0001Ki-VX for geh-help-gnu-emacs@m.gmane.org; Tue, 11 Apr 2006 11:51:11 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FTL8q-0001Jv-MT for help-gnu-emacs@gnu.org; Tue, 11 Apr 2006 11:50:56 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FTL8n-0001J7-WA for help-gnu-emacs@gnu.org; Tue, 11 Apr 2006 11:50:56 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FTL8n-0001J2-TP for help-gnu-emacs@gnu.org; Tue, 11 Apr 2006 11:50:53 -0400 Original-Received: from [80.91.229.2] (helo=ciao.gmane.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1FTLDh-0002J4-8i for help-gnu-emacs@gnu.org; Tue, 11 Apr 2006 11:55:57 -0400 Original-Received: from list by ciao.gmane.org with local (Exim 4.43) id 1FTL8P-0004kY-8q for help-gnu-emacs@gnu.org; Tue, 11 Apr 2006 17:50:29 +0200 Original-Received: from 207.167.42.60 ([207.167.42.60]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 11 Apr 2006 17:50:29 +0200 Original-Received: from ihs_4664 by 207.167.42.60 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 11 Apr 2006 17:50:29 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-To: help-gnu-emacs@gnu.org Original-Lines: 43 Original-X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: 207.167.42.60 User-Agent: Mozilla Thunderbird 0.9 (X11/20041105) X-Accept-Language: en-us, en In-Reply-To: X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:34309 Archived-At: [This doesn't belong on emacs-devel] Herbert Euler wrote: > Assume there are some functions, for instance, f1, f2, f3, > all of them are doing the same job, but with different arguments. > If I want to call one of them, but don't know which one is > actually called, how can I do that? I've written two macros > like > > (defmacro xgp-casi2-safe-call-iter (func largs) > `(if ,largs > (condition-case nil > (apply ,func (car ,largs)) > (error (xgp-casi2-safe-call-iter ,func (cdr ,largs)))))) > > (defmacro xgp-casi2-safe-call (func largs) > "Call function FUNC, try each element of LARGS, which is a list of > list, as argument to FUNC. > First call without arguments." > `(condition-case nil > (apply ,func) > (error (xgp-casi2-safe-call-iter ,func ,largs)))) > > And I will call it with > > (xgp-casi2-safe-call function '((args of f1) (args of f2) (args of f3))) > > This is my solution. Any suggestions? Thanks in advance. What are "args of f1" etc? They are apparently not the arguments to a single call to f1, since you have these variations: (apply ,func) ; this is tried first (apply ,func (car ,largs)) ; then this is tried, while cdr'ing down largs If all of the functions are defined, why would any of the function call signal an error? Why do you care which function is actually called? You certainly don't return that information, you only return the result of the first non-error-signalling call. -- Kevin Rodgers