impl list-ref and list-tail as C functions

This commit is contained in:
Yuichi Nishiwaki 2014-01-22 21:00:29 +09:00
parent 7865cfe9b3
commit 67d4d28d19
2 changed files with 24 additions and 8 deletions

View File

@ -517,14 +517,6 @@
(reverse (cdr list)
(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)
(set-car! (list-tail list k) obj))

View File

@ -290,6 +290,28 @@ pic_pair_set_cdr(pic_state *pic)
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
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, "set-car!", pic_pair_set_car);
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);
}