| Module | Prelude::List |
| In: |
lib/prelude/list.rb
|
$Id: List.html 23 2007-05-18 18:17:44Z ikk $
This eventually needs to be implemented with lazy lists, see lazylist.rubyforge.org for details
I used the signatures of Haskell’s List.hs file in order not to forget to implement the functions defined there and to remind of what was intended.
| all — : | (a -> Bool) -> [a] -> Bool |
# File lib/prelude/list.rb, line 180
180: def all(f, list)
181: and_(~map(f, list))
182: end
| and — : | [Bool] -> Bool |
# File lib/prelude/list.rb, line 165
165: def and_(list)
166: foldr(lambda {|x,y| x && y}, true, list)
167: end
| any — : | (a -> Bool) -> [a] -> Bool |
# File lib/prelude/list.rb, line 175
175: def any(f, list)
176: or_(~map(f, list))
177: end
| break — : | (a -> Bool) -> [a] -> ([a], [a]) |
# File lib/prelude/list.rb, line 333
333: def break_(list)
334: warn "Method 'break' is not implemented yet." if $VERBOSE
335: return lambda { [] }
336: end
| concat — : | [[a]] -> [a] |
# File lib/prelude/list.rb, line 153
153: def concat(list)
154: foldr(-:+, [], list)
155: end
| concatMap — : | (a -> [b]) -> [a] -> [b] |
# File lib/prelude/list.rb, line 158
158: def concat_map(list)
159: warn "Method 'concatMap' is not implemented yet." if $VERBOSE
160: return lambda { [] }
161: end
| cycle — : | [a] -> [a] |
# File lib/prelude/list.rb, line 275
275: def cycle(list)
276: warn "Method 'cycle' is not implemented yet." if $VERBOSE
277: return lambda { [] }
278: end
| delete — : | (Eq a) => a -> [a] -> [a] |
# File lib/prelude/list.rb, line 555
555: def delete(o, list)
556: warn "Method 'delete' is not implemented yet." if $VERBOSE
557: return lambda { [] }
558: end
| drop — : | Int -> [a] -> [a] |
# File lib/prelude/list.rb, line 298
298: def drop(n, list)
299: lambda { list[n..-1] }
300: end
| dropWhile — : | (a -> Bool) -> [a] -> [a] |
# File lib/prelude/list.rb, line 318
318: def drop_while(p, list)
319: case list
320: when [] : lambda { [] }
321: else p[~head(list)] ? lambda { ~drop_while(p, ~tail(list)) } : lambda { list }
322: end
323: end
| elem — : | a -> [a] -> Bool |
# File lib/prelude/list.rb, line 379
379: def elem(list)
380: warn "Method 'elem' is not implemented yet." if $VERBOSE
381: return lambda { [] }
382: end
| elemIndex — : | (Eq a) => a -> [a] -> Maybe Int |
# File lib/prelude/list.rb, line 425
425: def elem_index(list)
426: warn "Method 'elem_index' is not implemented yet." if $VERBOSE
427: return lambda { [] }
428: end
| elemIndices — : | (Eq a) => a -> [a] -> [Int] |
# File lib/prelude/list.rb, line 433
433: def elem_indices(list)
434: warn "Method 'elem_indices' is not implemented yet." if $VERBOSE
435: return lambda { [] }
436: end
| filter — : | (a -> Bool) -> [a] -> [a] |
# File lib/prelude/list.rb, line 407
407: def filter(list)
408: warn "Method 'filter' is not implemented yet." if $VERBOSE
409: return lambda { [] }
410: end
| find — : | (a -> Bool) -> [a] -> Maybe a |
# File lib/prelude/list.rb, line 401
401: def find(p, list)
402: warn "Method 'find' is not implemented yet." if $VERBOSE
403: return lambda { [] }
404: end
| findIndex — : | (a -> Bool) -> [a] -> Maybe Int |
# File lib/prelude/list.rb, line 441
441: def find_index(list)
442: warn "Method 'find_index' is not implemented yet." if $VERBOSE
443: return lambda { [] }
444: end
| findIndices — : | (a -> Bool) -> [a] -> [Int] |
# File lib/prelude/list.rb, line 449
449: def find_indices(list)
450: warn "Method 'find_indices' is not implemented yet." if $VERBOSE
451: return lambda { [] }
452: end
| foldl — : | (a -> b -> a) -> a -> [b] -> a |
# File lib/prelude/list.rb, line 113
113: def foldl(f, a, list)
114: case list
115: when [] : lambda { a }
116: else lambda { f[~foldl(f, a, ~tail(list)), ~head(list)] }
117: end
118: end
| foldl1 — : | (a -> a -> a) -> [a] -> a |
# File lib/prelude/list.rb, line 127
127: def foldl1(f, list)
128: foldl(f, ~head(list), ~tail(list))
129: end
| foldl1’ — : | (a -> a -> a) -> [a] -> a |
# File lib/prelude/list.rb, line 132
132: def foldl1_(list)
133: warn "Method 'foldl1_' is not implemented yet." if $VERBOSE
134: return lambda { [] }
135: end
| foldl’ — : | (a -> b -> a) -> a -> [b] -> a |
# File lib/prelude/list.rb, line 121
121: def foldl_(list)
122: warn "Method 'foldl_' is not implemented yet." if $VERBOSE
123: return lambda { [] }
124: end
| foldr — : | (a -> b -> b) -> b -> [a] -> b |
# File lib/prelude/list.rb, line 138
138: def foldr(f, s, list)
139: case list
140: when [] : lambda { s }
141: else lambda { f[~head(list), ~foldr(f, s, ~tail(list))] }
142: end
143: end
| foldr1 — : | (a -> a -> a) -> [a] -> a |
# File lib/prelude/list.rb, line 146
146: def foldr1(f, list)
147: foldr(f, ~head(list), ~tail(list))
148: end
| group — : | Eq a => [a] -> [[a]] |
# File lib/prelude/list.rb, line 339
339: def group(list)
340: warn "Method 'group' is not implemented yet." if $VERBOSE
341: return lambda { [] }
342: end
| head — : | [a] -> a |
# File lib/prelude/list.rb, line 36
36: def head(list)
37: case list
38: when [] : empty_list_error
39: else lambda { list[0] }
40: end
41: end
| init — : | [a] -> [a] |
# File lib/prelude/list.rb, line 61
61: def init(list)
62: case list
63: when [] : empty_list_error
64: when [list[0]] : lambda { [] }
65: else lambda { [~head(list)]+~init(~tail(list)) }
66: end
67: end
| inits — : | [a] -> [[a]] |
# File lib/prelude/list.rb, line 345
345: def inits(list)
346: warn "Method 'inits' is not implemented yet." if $VERBOSE
347: return lambda { [] }
348: end
| insert — : | (Ord a) => a -> [a] -> [a] |
# File lib/prelude/list.rb, line 581
581: def insert(o, list)
582: warn "Method 'insert' is not implemented yet." if $VERBOSE
583: return lambda { [] }
584: end
| intersect — : | (Eq a) => [a] -> [a] -> [a] |
# File lib/prelude/list.rb, line 567
567: def intersect(list)
568: warn "Method 'intersect' is not implemented yet." if $VERBOSE
569: return lambda { [] }
570: end
| intersperse — : | a -> [a] -> [a] |
# File lib/prelude/list.rb, line 99
99: def intersperse(list)
100: warn "Method 'intersperse' is not implemented yet." if $VERBOSE
101: return lambda { [] }
102: end
| isPrefixOf — : | (Eq a) => [a] -> [a] -> Bool |
# File lib/prelude/list.rb, line 359
359: def is_prefix_of(list)
360: warn "Method 'is_prefix_of' is not implemented yet." if $VERBOSE
361: return lambda { [] }
362: end
| isSuffixOf — : | (Eq a) => [a] -> [a] -> Bool |
# File lib/prelude/list.rb, line 367
367: def is_suffix_of(list)
368: warn "Method 'is_suffix_of' is not implemented yet." if $VERBOSE
369: return lambda { [] }
370: end
| iterate — : | (a -> a) -> a -> [a] |
# File lib/prelude/list.rb, line 257
257: def iterate(list)
258: warn "Method 'iterate' is not implemented yet." if $VERBOSE
259: return lambda { [] }
260: end
| last — : | [a] -> a |
# File lib/prelude/list.rb, line 52
52: def last(list)
53: case list
54: when [] : empty_list_error
55: when [list[0]] : lambda { list[0] }
56: else last(~tail(list))
57: end
58: end
| length — : | [a] -> Int |
# File lib/prelude/list.rb, line 75
75: def length(list)
76: lambda { list.length }
77: end
| lines — : | String -> [String] |
# File lib/prelude/list.rb, line 523
523: def lines(list)
524: warn "Method 'lines' is not implemented yet." if $VERBOSE
525: return lambda { [] }
526: end
| lookup — : | (Eq a) => a -> [(a,b)] -> Maybe b |
# File lib/prelude/list.rb, line 393
393: def lookup(list)
394: warn "Method 'lookup' is not implemented yet." if $VERBOSE
395: return lambda { [] }
396: end
| map — : | (a -> b) -> [a] -> [b] |
# File lib/prelude/list.rb, line 80
80: def map(f, list)
81: case list
82: when [] : lambda{ [] }
83: else lambda{ [ f[~head(list)] ] + ~map(f, ~tail(list)) }
84: end
85: end
| mapAccumL — : | (a -> b -> (a,c)) -> a -> [b] -> (a,[c]) |
# File lib/prelude/list.rb, line 239
239: def map_accum_l(list)
240: warn "Method 'map_accum_l' is not implemented yet." if $VERBOSE
241: return lambda { [] }
242: end
| mapAccumR — : | (a -> b -> (a,c)) -> a -> [b] -> (a,[c]) |
# File lib/prelude/list.rb, line 247
247: def map_accum_r(list)
248: warn "Method 'map_accum_r' is not implemented yet." if $VERBOSE
249: return lambda { [] }
250: end
| maximum — : | (Ord a) => [a] -> a |
# File lib/prelude/list.rb, line 197
197: def maximum(list)
198: warn "Method 'maximum' is not implemented yet." if $VERBOSE
199: return lambda { [] }
200: end
| minimum — : | (Ord a) => [a] -> a |
# File lib/prelude/list.rb, line 203
203: def minimum(list)
204: warn "Method 'minimum' is not implemented yet." if $VERBOSE
205: return lambda { [] }
206: end
| notElem — : | a -> [a] -> Bool |
# File lib/prelude/list.rb, line 385
385: def not_elem(list)
386: warn "Method 'not_elem' is not implemented yet." if $VERBOSE
387: return lambda { [] }
388: end
| nub — : | (Eq a) => [a] -> [a] |
# File lib/prelude/list.rb, line 549
549: def nub(list)
550: warn "Method 'nub' is not implemented yet." if $VERBOSE
551: return lambda { [] }
552: end
| null — : | [a] -> Bool |
# File lib/prelude/list.rb, line 70
70: def null(list)
71: lambda { list.size == 0 }
72: end
| or — : | [Bool] -> Bool |
# File lib/prelude/list.rb, line 170
170: def or_(list)
171: foldr(lambda {|x,y| (x || y)}, false, list)
172: end
| partition — : | (a -> Bool) -> [a] -> ([a], [a]) |
# File lib/prelude/list.rb, line 413
413: def partition(p, list)
414: warn "Method 'partition' is not implemented yet." if $VERBOSE
415: return lambda { [] }
416: end
| product — : | (Num a) => [a] -> a |
# File lib/prelude/list.rb, line 191
191: def product(list)
192: warn "Method 'product' is not implemented yet." if $VERBOSE
193: return lambda { [] }
194: end
| repeat — : | a -> [a] |
# File lib/prelude/list.rb, line 263
263: def repeat(list)
264: warn "Method 'repeat' is not implemented yet." if $VERBOSE
265: return lambda { [] }
266: end
| replicate — : | Int -> a -> [a] |
# File lib/prelude/list.rb, line 269
269: def replicate(list)
270: warn "Method 'replicate' is not implemented yet." if $VERBOSE
271: return lambda { [] }
272: end
| , reverse — : | [a] -> [a] |
# File lib/prelude/list.rb, line 88
88: def reverse(list)
89: r = proc { |l, a|
90: case l
91: when [] : lambda { a }
92: else lambda { ~r[~tail(l), [~head(l)]+a] }
93: end
94: }
95: r[list, []]
96: end
| scanl — : | (a -> b -> a) -> a -> [b] -> [a] |
# File lib/prelude/list.rb, line 213
213: def scanl(f, s, list)
214: warn "Method 'scanl' is not implemented yet." if $VERBOSE
215: return lambda { [] }
216: end
| scanl1 — : | (a -> a -> a) -> [a] -> [a] |
# File lib/prelude/list.rb, line 219
219: def scanl1(f, list)
220: warn "Method 'scanl1' is not implemented yet." if $VERBOSE
221: return lambda { [] }
222: end
| scanr — : | (a -> b -> b) -> b -> [a] -> [b] |
# File lib/prelude/list.rb, line 225
225: def scanr(f, s, list)
226: warn "Method 'scanr' is not implemented yet." if $VERBOSE
227: return lambda { [] }
228: end
| scanr1 — : | (a -> a -> a) -> [a] -> [a] |
# File lib/prelude/list.rb, line 231
231: def scanr1(f, list)
232: warn "Method 'scanr1' is not implemented yet." if $VERBOSE
233: return lambda { [] }
234: end
| sort — : | (Ord a) => [a] -> [a] |
# File lib/prelude/list.rb, line 575
575: def sort(list)
576: warn "Method 'sort' is not implemented yet." if $VERBOSE
577: return lambda { [] }
578: end
| span — : | (a -> Bool) -> [a] -> ([a], [a]) |
# File lib/prelude/list.rb, line 328
328: def span(p, list)
329: lambda { [~takeWhile(p, list), ~dropWhile(p,list)] }
330: end
| splitAt — : | Int -> [a] -> ([a], [a]) |
# File lib/prelude/list.rb, line 303
303: def split_at(n, list)
304: lambda { [~take(n, list), ~drop(n, list)] }
305: end
| sum — : | (Num a) => [a] -> a |
# File lib/prelude/list.rb, line 185
185: def sum(list)
186: warn "Method 'sum' is not implemented yet." if $VERBOSE
187: return lambda { [] }
188: end
| tail — : | [a] -> [a] |
# File lib/prelude/list.rb, line 44
44: def tail(list)
45: case list
46: when [] : empty_list_error
47: else lambda { list[1..-1] }
48: end
49: end
| tails — : | [a] -> [[a]] |
# File lib/prelude/list.rb, line 351
351: def tails(list)
352: warn "Method 'tails' is not implemented yet." if $VERBOSE
353: return lambda { [] }
354: end
| take — : | Int -> [a] -> [a] |
# File lib/prelude/list.rb, line 293
293: def take(n, list)
294: lambda { list[0..(n-1)] }
295: end
| takeWhile — : | (a -> Bool) -> [a] -> [a] |
# File lib/prelude/list.rb, line 308
308: def take_while(p, list)
309: case list
310: when [] : lambda { [] }
311: else p[~head(list)] ? lambda { [~head(list)]+ ~take_while(p, ~tail(list)) } : lambda { [] }
312: end
313: end
| transpose — : | [[a]] -> [[a]] |
# File lib/prelude/list.rb, line 105
105: def transpose(list)
106: # FIXIT
107: lambda { list.transpose }
108: end
| unfoldr — : | (b -> Maybe (a, b)) -> b -> [a] |
# File lib/prelude/list.rb, line 283
283: def unfoldr(list)
284: warn "Method 'unfoldr' is not implemented yet." if $VERBOSE
285: return lambda { [] }
286: end
| union — : | (Eq a) => [a] -> [a] -> [a] |
# File lib/prelude/list.rb, line 561
561: def union(list)
562: warn "Method 'union' is not implemented yet." if $VERBOSE
563: return lambda { [] }
564: end
| unlines — : | [String] -> String |
# File lib/prelude/list.rb, line 535
535: def unlines(list)
536: warn "Method 'unlines' is not implemented yet." if $VERBOSE
537: return lambda { [] }
538: end
| unwords — : | [String] -> String |
# File lib/prelude/list.rb, line 541
541: def unwords(list)
542: warn "Method 'unwords' is not implemented yet." if $VERBOSE
543: return lambda { [] }
544: end
| unzip — : | [(a,b)] -> ([a],[b]) |
# File lib/prelude/list.rb, line 501
501: def unzip(list)
502: warn "Method 'unzip' is not implemented yet." if $VERBOSE
503: return lambda { [] }
504: end
unzip3
# File lib/prelude/list.rb, line 507
507: def unzip3(list)
508: warn "Method 'unzip3' is not implemented yet." if $VERBOSE
509: return lambda { [] }
510: end
unzip4, unzip5, unzip6, unzip7
# File lib/prelude/list.rb, line 513
513: def unzip4(list)
514: warn "Method 'unzip4' is not implemented yet." if $VERBOSE
515: return lambda { [] }
516: end
| words — : | String -> [String] |
# File lib/prelude/list.rb, line 529
529: def words(list)
530: warn "Method 'words' is not implemented yet." if $VERBOSE
531: return lambda { [] }
532: end
| zip — : | [a] -> [b] -> [(a,b)] |
# File lib/prelude/list.rb, line 459
459: def zip(list1, list2)
460: warn "Method 'zip' is not implemented yet." if $VERBOSE
461: return lambda { [] }
462: end
zip3
# File lib/prelude/list.rb, line 465
465: def zip3(list)
466: warn "Method 'zip3' is not implemented yet." if $VERBOSE
467: return lambda { [] }
468: end
zip4, zip5, zip6, zip7
# File lib/prelude/list.rb, line 471
471: def zip4(list)
472: warn "Method 'zip4' is not implemented yet." if $VERBOSE
473: return lambda { [] }
474: end
| zipWith — : | (a -> b -> c) -> [a] -> [b] -> [c] |
# File lib/prelude/list.rb, line 477
477: def zip_with(list)
478: warn "Method 'zip_with' is not implemented yet." if $VERBOSE
479: return lambda { [] }
480: end
zipWith3
# File lib/prelude/list.rb, line 485
485: def zip_with3(list)
486: warn "Method 'zip_with3' is not implemented yet." if $VERBOSE
487: return lambda { [] }
488: end