1
C
코드의 다음 스 니펫을 고려하십시오. M
의 실제 값과 arr
의 실제 값은 실제로 중요하지 않습니다. Common Lisp에서 'loop` 매크로로 종속 루프 변수를 사용하는 방법
int arr[M] = {...};
for (int i=0; i<M; ++i) {
for (int j=i+1; j<M; ++j) {
/* do something */
}
}
은 무엇 매크로
loop
를 사용하여 (관용적하고 효율적인) CL의 아날로그 것 (또는 경우
loop
오른쪽 도구, 다른 구조되지 않습니다)?
나는 배열 액세스와 목록 액세스를 비교하는 것이 정확하지 않지만 더 나은 예를 생각해 낼 수 없다는 것을 알고있다. 내가 시도
하나의 가능성은 다음과 같다 :
(defvar l '(1 2 ...))
(loop :for n :on l :do
(loop :for x :in (cdr n) :do
;; do something
))
을하지만 이것은 오히려 거추장스러운 것 같다.
기타 유사한 questions은 목록이없는 범위를 처리합니다.
글쎄, 그 절차가 빠르다고 감사 @Rainer Joswig. 파괴는 확실히'cdr '을 사용하는 것보다 멋지게 보입니다. 내가 실제로 계산하고자하는 것 :리스트의 요소들에 어떤 조건이 있다고 가정합니다 (예 : 합계는 42와 같습니다). 조건을 만족하는 모든 값 쌍을 목록에서 찾고 싶습니다. – Aroob
@Aroob like'(루프 : for (head. tail) : on리스트 : nconc (loop : for : 꼬리 : if (= target (+ head item)) : collect (head item을 나열))'? – Sylwester
@Sylwester 예, 그렇습니다; RainerJoswig은 이미 이것을 대답에 포함 시켰습니다. 나는 내가 정말로 원했던 것이 목록 내포와 같은 것이라고 생각한다. 그러나 지금은 이것이 제 목적을위한 것입니다. – Aroob