*** empty log message ***
[bpt/guile.git] / libguile / gh_list.c
1 /* Copyright (C) 1995,1996,1997, 2000 Free Software Foundation, Inc.
2
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2, or (at your option)
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; see the file COPYING. If not, write to
15 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
16 * Boston, MA 02111-1307 USA
17 *
18 * As a special exception, the Free Software Foundation gives permission
19 * for additional uses of the text contained in its release of GUILE.
20 *
21 * The exception is that, if you link the GUILE library with other files
22 * to produce an executable, this does not by itself cause the
23 * resulting executable to be covered by the GNU General Public License.
24 * Your use of that executable is in no way restricted on account of
25 * linking the GUILE library code into it.
26 *
27 * This exception does not however invalidate any other reasons why
28 * the executable file might be covered by the GNU General Public License.
29 *
30 * This exception applies only to the code released by the
31 * Free Software Foundation under the name GUILE. If you copy
32 * code from other Free Software Foundation releases into a copy of
33 * GUILE, as the General Public License permits, the exception does
34 * not apply to the code that you add in this way. To avoid misleading
35 * anyone as to the status of such modified files, you must delete
36 * this exception notice from them.
37 *
38 * If you write modifications of your own for GUILE, it is your choice
39 * whether to permit this exception to apply to your modifications.
40 * If you do not wish that, delete this exception notice. */
41 \f
42
43 /* list manipulation */
44
45 #include "libguile/gh.h"
46
47 /* returns the length of a list */
48 unsigned long
49 gh_length (SCM l)
50 {
51 return gh_scm2ulong (scm_length (l));
52 }
53
54 /* list operations */
55
56 /* gh_list(SCM elt, ...) is implemented as a macro in gh.h. */
57
58 /* gh_append() takes a args, which is a list of lists, and appends
59 them all together into a single list, which is returned. This is
60 equivalent to the Scheme procedure (append list1 list2 ...) */
61 SCM
62 gh_append (SCM args)
63 {
64 return scm_append (args);
65 }
66
67 SCM
68 gh_append2 (SCM l1, SCM l2)
69 {
70 return scm_append (scm_list_2 (l1, l2));
71 }
72
73 SCM
74 gh_append3(SCM l1, SCM l2, SCM l3)
75 {
76 return scm_append (scm_list_3 (l1, l2, l3));
77 }
78
79 SCM
80 gh_append4 (SCM l1, SCM l2, SCM l3, SCM l4)
81 {
82 return scm_append (scm_list_4 (l1, l2, l3, l4));
83 }
84
85 /* gh_reverse() is defined as a macro in gh.h */
86 /* gh_list_tail() is defined as a macro in gh.h */
87 /* gh_list_ref() is defined as a macro in gh.h */
88 /* gh_memq() is defined as a macro in gh.h */
89 /* gh_memv() is defined as a macro in gh.h */
90 /* gh_member() is defined as a macro in gh.h */
91 /* gh_assq() is defined as a macro in gh.h */
92 /* gh_assv() is defined as a macro in gh.h */
93 /* gh_assoc() is defined as a macro in gh.h */
94
95 /* analogous to the Scheme cons operator */
96 SCM
97 gh_cons (SCM x, SCM y)
98 {
99 return scm_cons (x, y);
100 }
101
102 /* analogous to the Scheme car operator */
103 SCM
104 gh_car (SCM x)
105 {
106 return SCM_CAR (x);
107 }
108
109 /* analogous to the Scheme cdr operator */
110 SCM
111 gh_cdr (SCM x)
112 {
113 return SCM_CDR (x);
114 }
115
116 /* now for the multiple car/cdr utility procedures */
117 SCM
118 gh_caar (SCM x)
119 {
120 return SCM_CAAR (x);
121 }
122 SCM
123 gh_cadr (SCM x)
124 {
125 return SCM_CADR (x);
126 }
127 SCM
128 gh_cdar (SCM x)
129 {
130 return SCM_CDAR (x);
131 }
132 SCM
133 gh_cddr (SCM x)
134 {
135 return SCM_CDDR (x);
136 }
137
138 SCM
139 gh_caaar (SCM x)
140 {
141 return SCM_CAAAR (x);
142 }
143 SCM
144 gh_caadr (SCM x)
145 {
146 return SCM_CAADR (x);
147 }
148 SCM
149 gh_cadar (SCM x)
150 {
151 return SCM_CADAR (x);
152 }
153 SCM
154 gh_caddr (SCM x)
155 {
156 return SCM_CADDR (x);
157 }
158 SCM
159 gh_cdaar (SCM x)
160 {
161 return SCM_CDAAR (x);
162 }
163 SCM
164 gh_cdadr (SCM x)
165 {
166 return SCM_CDADR (x);
167 }
168 SCM
169 gh_cddar (SCM x)
170 {
171 return SCM_CDDAR (x);
172 }
173 SCM
174 gh_cdddr (SCM x)
175 {
176 return SCM_CDDDR (x);
177 }
178
179 /* equivalent to (set-car! pair value) */
180 SCM
181 gh_set_car_x(SCM pair, SCM value)
182 {
183 return scm_set_car_x(pair, value);
184 }
185
186 /* equivalent to (set-cdr! pair value) */
187 SCM
188 gh_set_cdr_x(SCM pair, SCM value)
189 {
190 return scm_set_cdr_x(pair, value);
191 }
192
193 /*
194 Local Variables:
195 c-file-style: "gnu"
196 End:
197 */