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