replace length/reverse/append impls with c functions
This commit is contained in:
parent
67d4d28d19
commit
bbd1ec3fbb
|
@ -498,25 +498,6 @@
|
||||||
(cons (car args)
|
(cons (car args)
|
||||||
(make-list (- k 1) (car args))))))
|
(make-list (- k 1) (car args))))))
|
||||||
|
|
||||||
(define (length list)
|
|
||||||
(if (null? list)
|
|
||||||
0
|
|
||||||
(+ 1 (length (cdr list)))))
|
|
||||||
|
|
||||||
(define (append xs ys)
|
|
||||||
(if (null? xs)
|
|
||||||
ys
|
|
||||||
(cons (car xs)
|
|
||||||
(append (cdr xs) ys))))
|
|
||||||
|
|
||||||
(define (reverse list . args)
|
|
||||||
(if (null? args)
|
|
||||||
(reverse list '())
|
|
||||||
(if (null? list)
|
|
||||||
(car args)
|
|
||||||
(reverse (cdr list)
|
|
||||||
(cons (car list) (car args))))))
|
|
||||||
|
|
||||||
(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))
|
||||||
|
|
||||||
|
|
61
src/pair.c
61
src/pair.c
|
@ -242,16 +242,6 @@ pic_pair_cdr(pic_state *pic)
|
||||||
return pic_cdr(pic, v);
|
return pic_cdr(pic, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static pic_value
|
|
||||||
pic_pair_null_p(pic_state *pic)
|
|
||||||
{
|
|
||||||
pic_value v;
|
|
||||||
|
|
||||||
pic_get_args(pic, "o", &v);
|
|
||||||
|
|
||||||
return pic_bool_value(pic_nil_p(v));
|
|
||||||
}
|
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
pic_pair_cons(pic_state *pic)
|
pic_pair_cons(pic_state *pic)
|
||||||
{
|
{
|
||||||
|
@ -290,6 +280,52 @@ pic_pair_set_cdr(pic_state *pic)
|
||||||
return pic_none_value();
|
return pic_none_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_pair_null_p(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_value v;
|
||||||
|
|
||||||
|
pic_get_args(pic, "o", &v);
|
||||||
|
|
||||||
|
return pic_bool_value(pic_nil_p(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_pair_length(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_value list;
|
||||||
|
|
||||||
|
pic_get_args(pic, "o", &list);
|
||||||
|
|
||||||
|
return pic_int_value(pic_length(pic, list));
|
||||||
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_pair_append(pic_state *pic)
|
||||||
|
{
|
||||||
|
size_t argc;
|
||||||
|
pic_value *args, list;
|
||||||
|
|
||||||
|
pic_get_args(pic, "*", &argc, &args);
|
||||||
|
|
||||||
|
list = args[--argc];
|
||||||
|
|
||||||
|
while (argc-- > 0) {
|
||||||
|
list = pic_append(pic, args[argc], list);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_pair_reverse(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_value list;
|
||||||
|
|
||||||
|
pic_get_args(pic, "o", &list);
|
||||||
|
|
||||||
|
return pic_reverse(pic, list);
|
||||||
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
pic_pair_list_tail(pic_state *pic)
|
pic_pair_list_tail(pic_state *pic)
|
||||||
{
|
{
|
||||||
|
@ -318,10 +354,13 @@ pic_init_pair(pic_state *pic)
|
||||||
pic_defun(pic, "pair?", pic_pair_pair_p);
|
pic_defun(pic, "pair?", pic_pair_pair_p);
|
||||||
pic_defun(pic, "car", pic_pair_car);
|
pic_defun(pic, "car", pic_pair_car);
|
||||||
pic_defun(pic, "cdr", pic_pair_cdr);
|
pic_defun(pic, "cdr", pic_pair_cdr);
|
||||||
pic_defun(pic, "null?", pic_pair_null_p);
|
|
||||||
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, "null?", pic_pair_null_p);
|
||||||
|
pic_defun(pic, "length", pic_pair_length);
|
||||||
|
pic_defun(pic, "append", pic_pair_append);
|
||||||
|
pic_defun(pic, "reverse", pic_pair_reverse);
|
||||||
pic_defun(pic, "list-tail", pic_pair_list_tail);
|
pic_defun(pic, "list-tail", pic_pair_list_tail);
|
||||||
pic_defun(pic, "list-ref", pic_pair_list_ref);
|
pic_defun(pic, "list-ref", pic_pair_list_ref);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue