Skip to content

Commit 4bfc021

Browse files
committed
---
yaml --- r: 2728 b: refs/heads/master c: b4c9f78 h: refs/heads/master v: v3
1 parent bc360dd commit 4bfc021

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 1e9aef828c057356badd464fcf7edb2f02d0b216
2+
refs/heads/master: b4c9f782e4ef8ec44e6de944023557df9a34c212

trunk/src/lib/list.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ tag list[T] {
1010
nil;
1111
}
1212

13+
fn from_vec[T](vec[T] v) -> list[T] {
14+
auto l = nil[T];
15+
// FIXME: This would be faster and more space efficient if it looped over
16+
// a reverse vector iterator. Unfortunately generic iterators seem not to
17+
// work yet.
18+
for (T item in vec::reversed(v)) {
19+
l = cons[T](item, @l);
20+
}
21+
ret l;
22+
}
23+
1324
fn foldl[T,U](&list[T] ls, &U u, fn(&T t, &U u) -> U f) -> U {
1425
alt(ls) {
1526
case (cons[T](?hd, ?tl)) {

trunk/src/test/run-pass/lib-list.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use std;
2+
import std::list;
3+
import std::list::car;
4+
import std::list::cdr;
5+
import std::list::from_vec;
6+
7+
fn test_from_vec() {
8+
auto l = from_vec([0, 1, 2]);
9+
assert (car(l) == 0);
10+
assert (car(cdr(l)) == 1);
11+
assert (car(cdr(cdr(l))) == 2);
12+
}
13+
14+
fn main() {
15+
test_from_vec();
16+
}

0 commit comments

Comments
 (0)