2009-10-16 5 views
0

'(4 3 1) '(5 6 8)구성표 목록의 첫 번째 항목을 가져 오는 방법?

나는이

(first '(4 3 1) '(5 6 8)) 

같은 것이 결과로 나에게 첫 번째 항목

(4 3 1) 

를 반환해야합니다 나는이 목록의 첫 번째 항목을하고 싶은 말은. 제가 호출 할 수있는 스키마 빌트인 함수에 이와 같은 것이 있습니까? 그것은 단지

목록-REF 작동하지 않는 일 개 목록, 위 같은 이유로 내부 나에게 첫 번째 항목을 반환로

차 목록

어떻게 내부 나에게 한 항목을 반환 작동하지 않습니다 내가 그랬어? 이 첫 번째 기능을 스스로 작성해야한다면?

답변

6

list-ref 절차를 사용하면 목록에서 해당 색인을 사용하여 요소를 가져올 수 있습니다 (예 :

(let ((l '((4 3 1) (5 6 8)))) 
    (list-ref l 0)) ; get the element at index 0 
).

그러나 당신은 단지 첫 번째 요소를 원한다면, 당신은 car를 사용할 수 있습니다

(let ((l '((4 3 1) (5 6 8)))) 
    (car l)) 

확인 조각은 here를 실행.

+0

NICE이게 정말 멋져. – Jonathan

+0

그냥 list-ref가 작동하지 않는다고하지 않았습니까? –

1

은 내가 기법을 사용하기 때문에 오랜만이야,하지만 당신은

(first (list '(4 3 1) '(5 6 8)))

+0

아, 좋은 지적 – Jonathan

+0

아니요, 그렇지 않습니다. 두 개의 매개 변수를 취하는 함수를 정의 할 수 있습니다. 각 매개 변수는 목록이 될 수 있으며 첫 번째 매개 변수 만 반환하면됩니다. (예를 들어) 어떤 이유로 든 임의의 수의 목록을 수락하고 여전히 첫 번째 목록 만 반환하려는 경우 목록의 목록을 사용하고자 할 수 있습니다. –

+0

좋은 지적. 나는 목록의 임의의 숫자를 요구 사항의 일부로 가정하고 있었다. – Kendrick

4

당신은 너무 열심히 노력하고 먼저 자신의 목록에있는 목록이 필요하지 않을 :

> (define (first a b) a)  
> (first '(1 2 3) '(4 5 6)) 
(1 2 3) 
+0

그와 비슷한 것이지만 나는 내 모든 문제를 여기에 넣지 않았다. 그것들 중 하나가 값을 전달하지 않으면 작동하지 않습니다. 하지만 고마워. 내가 생각을 가지고 있다고 생각해. :) – Jonathan

4

"." 함수 정의에서 임의의 수의 인수를 취합니다.

(define (first . args) (car args)) 
(first '(4 3 1) '(5 6 8)) ;; => (4 3 1) 
+0

단순히''(첫 번째 자동차 정의) ''를하는 것이 어떻습니까? – Matteo

+0

'car'는 단 하나의 인수 만 사용합니다. – torus

관련 문제