impl list-ref and list-tail as C functions
This commit is contained in:
parent
7865cfe9b3
commit
67d4d28d19
|
@ -517,14 +517,6 @@
|
||||||
(reverse (cdr list)
|
(reverse (cdr list)
|
||||||
(cons (car list) (car args))))))
|
(cons (car list) (car args))))))
|
||||||
|
|
||||||
(define (list-tail list k)
|
|
||||||
(if (zero? k)
|
|
||||||
list
|
|
||||||
(list-tail (cdr list) (- k 1))))
|
|
||||||
|
|
||||||
(define (list-ref list k)
|
|
||||||
(car (list-tail list k)))
|
|
||||||
|
|
||||||
(define (list-set! list k obj)
|
(define (list-set! list k obj)
|
||||||
(set-car! (list-tail list k) obj))
|
(set-car! (list-tail list k) obj))
|
||||||
|
|
||||||
|
|
24
src/pair.c
24
src/pair.c
|
@ -290,6 +290,28 @@ pic_pair_set_cdr(pic_state *pic)
|
||||||
return pic_none_value();
|
return pic_none_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_pair_list_tail(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_value list;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pic_get_args(pic, "oi", &list, &i);
|
||||||
|
|
||||||
|
return pic_list_tail(pic, list, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_pair_list_ref(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_value list;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pic_get_args(pic, "oi", &list, &i);
|
||||||
|
|
||||||
|
return pic_list_ref(pic, list, i);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pic_init_pair(pic_state *pic)
|
pic_init_pair(pic_state *pic)
|
||||||
{
|
{
|
||||||
|
@ -300,4 +322,6 @@ pic_init_pair(pic_state *pic)
|
||||||
pic_defun(pic, "cons", pic_pair_cons);
|
pic_defun(pic, "cons", pic_pair_cons);
|
||||||
pic_defun(pic, "set-car!", pic_pair_set_car);
|
pic_defun(pic, "set-car!", pic_pair_set_car);
|
||||||
pic_defun(pic, "set-cdr!", pic_pair_set_cdr);
|
pic_defun(pic, "set-cdr!", pic_pair_set_cdr);
|
||||||
|
pic_defun(pic, "list-tail", pic_pair_list_tail);
|
||||||
|
pic_defun(pic, "list-ref", pic_pair_list_ref);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue