문제

&rest에 지정된 값에 저장된 매개변수를 사용하여 작업하는 방법을 알려주실 수 있는 분 계신가요?

나는 많은 것을 읽었으며 작성자는 모든 매개변수를 나열하는 방법만 알고 있는 것 같습니다.

(defun test (a &rest b) b)

보기에는 좋지만 그다지 유용하지는 않습니다.

지금까지 제가 찾은 가장 좋은 방법은 첫 번째, 두 번째 등을 사용하여 원하는 매개변수를 얻는 것입니다.

(defun test (a &rest b)
    (first b))

이 방법은 10번째 매개변수에서 작동이 중지되는 것으로 나타났습니다. 그러나 사양(내가 읽은 내용에 따르면)에서는 최소 50개를 지원합니다.50개의 매개변수를 사용할 가능성이 희박하더라도 이들 모두에 액세스하는 방법을 알고 싶습니다.

감사해요

도움이 되었습니까?

해결책

액세서 기능에서 첫 번째, 두 번째 및 SO는 자동차/CDR 또는 NTH 위에 "단지"유틸리티 기능입니다. 따라서 특정 질문에 대한 답은 "NTH 또는 ELT 사용"(또는 자신의 특정 액세서 기능을 구축)입니다.

원한다면 11 번째를 다음과 같이 정의 할 수 있습니다.

(Defunenth (목록) (Nth 10 List)))

그러나, 나는 & REST 목록에 주어진 논증의 특정 위치를 돌보지 않고, 내가 무언가를하고 싶은 일이 0 개 이상있을 때 주로 사용 및 휴식 인수를 사용한다는 것을 알았습니다. 그것은 일반적으로 루프, do 또는 dolist를 사용하여 인수를 가로 지르고 각각과 함께 무언가를하는 것을 수반합니다. 지도 패밀리 또는 (때때로) 감소합니다.

다른 팁

나머지 매개변수는 단지 목록일 뿐입니다.일반적인 목록 작업을 사용하여 처리할 수 있습니다.

(defun test (a &rest b))
  (dolist (s b)
    (when (> s 1)
      (print s)
      (do-something-else b)))

실제로 기능이 유용합니다. 당신은 그것을 시도하면됩니다.

CL-USER 1 > (defun test (a &rest b) b)
TEST

CL-USER 2 > (test 1 2 3 4)
(2 3 4)

따라서 B는 단지 논쟁의 목록 일뿐입니다. 따라서 모든 목록 및 시퀀스 작업이 적용됩니다. 마법은 없습니다. Nth 요소에 액세스하는 기능, 요소를 제거하는 기능 등 ..

공통 LISP hyperspec에서 관련 기능이 나열됩니다.

14. 고려 사전

17. 시퀀스 사전

기본 LISP 튜토리얼의 경우 ToureTzky의 책을 확인하십시오.

일반적인 LISP : 상징적 계산에 대한 부드러운 소개

이 책은 PDF 및 PostScript로 다운로드 할 수 있습니다. 기본 공통 LISP를 가르칩니다.

파괴 구조를 사용할 수도 있습니다.

(defun my-function (&rest arguments)
  (destructuring-bind (a b &rest c) arguments
    (format nil "~A,~A followed with ~A" a b c)))

CL-USER> (my-function 1 2 "Give" 'me "more" 'arguments!!)
==> "1,2 followed with (Give ME more ARGUMENTS!!)"

나는 단지 그들 모두를 통과하기 위해 재귀적인 반복을 가지고 있습니다. Dolist가 더 좋다고 생각하지만 구식 방법을 사용하는 것을 좋아합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top