/[guile]/guile/guile-core/srfi/srfi-16.scm
ViewVC logotype

Diff of /guile/guile-core/srfi/srfi-16.scm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3.2.1 by mdj, Thu Oct 18 19:43:07 2001 UTC revision 1.3.2.2 by ttn, Thu Mar 28 01:52:37 2002 UTC
# Line 1  Line 1 
1  ;;;; srfi-16.scm --- `case-lambda' for Guile  ;;; srfi-16.scm --- case-lambda
2    
3  ;;; Copyright (C) 2001 Free Software Foundation, Inc.  ;; Copyright (C) 2001, 2002 Free Software Foundation, Inc.
4  ;;;  ;;
5  ;;; This program is free software; you can redistribute it and/or  ;; This program is free software; you can redistribute it and/or
6  ;;; modify it under the terms of the GNU General Public License as  ;; modify it under the terms of the GNU General Public License as
7  ;;; published by the Free Software Foundation; either version 2, or  ;; published by the Free Software Foundation; either version 2, or
8  ;;; (at your option) any later version.  ;; (at your option) any later version.
9  ;;;  ;;
10  ;;; This program is distributed in the hope that it will be useful,  ;; This program is distributed in the hope that it will be useful,
11  ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of  ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12  ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  ;;; General Public License for more details.  ;; General Public License for more details.
14  ;;;  ;;
15  ;;; You should have received a copy of the GNU General Public License  ;; You should have received a copy of the GNU General Public License
16  ;;; along with this software; see the file COPYING.  If not, write to  ;; along with this software; see the file COPYING.  If not, write to
17  ;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,  ;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18  ;;; Boston, MA 02111-1307 USA  ;; Boston, MA 02111-1307 USA
19  ;;;  ;;
20  ;;; As a special exception, the Free Software Foundation gives permission  ;; As a special exception, the Free Software Foundation gives permission
21  ;;; for additional uses of the text contained in its release of GUILE.  ;; for additional uses of the text contained in its release of GUILE.
22  ;;;  ;;
23  ;;; The exception is that, if you link the GUILE library with other files  ;; The exception is that, if you link the GUILE library with other files
24  ;;; to produce an executable, this does not by itself cause the  ;; to produce an executable, this does not by itself cause the
25  ;;; resulting executable to be covered by the GNU General Public License.  ;; resulting executable to be covered by the GNU General Public License.
26  ;;; Your use of that executable is in no way restricted on account of  ;; Your use of that executable is in no way restricted on account of
27  ;;; linking the GUILE library code into it.  ;; linking the GUILE library code into it.
28  ;;;  ;;
29  ;;; This exception does not however invalidate any other reasons why  ;; This exception does not however invalidate any other reasons why
30  ;;; the executable file might be covered by the GNU General Public License.  ;; the executable file might be covered by the GNU General Public License.
31  ;;;  ;;
32  ;;; This exception applies only to the code released by the  ;; This exception applies only to the code released by the
33  ;;; Free Software Foundation under the name GUILE.  If you copy  ;; Free Software Foundation under the name GUILE.  If you copy
34  ;;; code from other Free Software Foundation releases into a copy of  ;; code from other Free Software Foundation releases into a copy of
35  ;;; GUILE, as the General Public License permits, the exception does  ;; GUILE, as the General Public License permits, the exception does
36  ;;; not apply to the code that you add in this way.  To avoid misleading  ;; not apply to the code that you add in this way.  To avoid misleading
37  ;;; anyone as to the status of such modified files, you must delete  ;; anyone as to the status of such modified files, you must delete
38  ;;; this exception notice from them.  ;; this exception notice from them.
39  ;;;  ;;
40  ;;; If you write modifications of your own for GUILE, it is your choice  ;; If you write modifications of your own for GUILE, it is your choice
41  ;;; whether to permit this exception to apply to your modifications.  ;; whether to permit this exception to apply to your modifications.
42  ;;; If you do not wish that, delete this exception notice.  ;; If you do not wish that, delete this exception notice.
43    
44  ;;; Commentary:  ;;; Author: Martin Grabmueller
45    
46  ;;; Implementation of SRFI-16.  `case-lambda' is a syntactic form  ;;; Commentary:
 ;;; which permits writing functions acting different according to the  
 ;;; number of arguments passed.  
 ;;;  
 ;;; The syntax of the `case-lambda' form is defined in the following  
 ;;; EBNF grammar.  
 ;;;  
 ;;; <case-lambda>  
 ;;;    --> (case-lambda <case-lambda-clause>)  
 ;;; <case-lambda-clause>  
 ;;;    --> (<signature> <definition-or-command>*)  
 ;;; <signature>  
 ;;;    --> (<identifier>*)  
 ;;;      | (<identifier>* . <identifier>)  
 ;;;      | <identifier>  
 ;;;  
 ;;; The value returned by a `case-lambda' form is a procedure which  
 ;;; matches the number of actual arguments against the signatures in  
 ;;; the various clauses, in order.  The first matching clause is  
 ;;; selected, the corresponding values from the actual parameter list  
 ;;; are bound to the variable names in the clauses and the body of the  
 ;;; clause is evaluated.  
47    
48  ;;; Author: Martin Grabmueller  ;; Implementation of SRFI-16.  `case-lambda' is a syntactic form
49    ;; which permits writing functions acting different according to the
50    ;; number of arguments passed.
51    ;;
52    ;; The syntax of the `case-lambda' form is defined in the following
53    ;; EBNF grammar.
54    ;;
55    ;; <case-lambda>
56    ;;    --> (case-lambda <case-lambda-clause>)
57    ;; <case-lambda-clause>
58    ;;    --> (<signature> <definition-or-command>*)
59    ;; <signature>
60    ;;    --> (<identifier>*)
61    ;;      | (<identifier>* . <identifier>)
62    ;;      | <identifier>
63    ;;
64    ;; The value returned by a `case-lambda' form is a procedure which
65    ;; matches the number of actual arguments against the signatures in
66    ;; the various clauses, in order.  The first matching clause is
67    ;; selected, the corresponding values from the actual parameter list
68    ;; are bound to the variable names in the clauses and the body of the
69    ;; clause is evaluated.
70    
71  ;;; Code:  ;;; Code:
72    
73  (define-module (srfi srfi-16)  (define-module (srfi srfi-16)
74    :export-syntax (case-lambda))    :export-syntax (case-lambda))
75    
# Line 146  Line 147 
147                (let ((,length-name (length ,args-name)))                (let ((,length-name (length ,args-name)))
148                  (cond ,@(gen-clauses clauses length-name args-name))))))                  (cond ,@(gen-clauses clauses length-name args-name))))))
149        proc)))        proc)))
150    
151    ;;; srfi-16.scm ends here

Legend:
Removed from v.1.3.2.1  
changed lines
  Added in v.1.3.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26