2014-06-12 2 views
-1

저는 Lisp이 좋지 않습니다. 구문 오류를 찾으십시오. 목록에 두 요소를 서로 바꿔주는 함수를 작성해야합니다. 이 함수는 루프 사이클로 구성되어야합니다. 지금까지 있다면 어떨까요?Lisp 함수에서 구문 오류를 정의하십시오.

(defun swap-two-element(z x y) 
    (let ((newlist nil) (newlist2 nil) (copyz z) (copyz2 z) (newx nil)) 
    (loop 
     (when (= (- (length z) (length copyz2)) y) 
     (return (set newx car z))) 
     (setq newlist2 (append newlist2(car copyz2)) 
      copyz2 (cdr copyz2))))) 

전화 예 :

+0

오류 메시지에 무엇이 표시됩니까? 또한, 주위에 몇 가지 리스프 예제를보고 일부 공백을 사용하십시오. 코드를 이해하는 것이 훨씬 쉬울 것입니다. – lurker

+0

, 컴파일러 경고 : ; SWAP-TWO-ELEMENT : 인수가있는 SET 호출 (NEWX CAR Z)에서 ; 3 개의 논쟁이 제공되었지만, 최대 2 개는 받아 들여진다. ; SET 의 현재 글로벌 정의에 의해; SWAP-TWO-ELEMENT : 선언되지 않은 무료 변수 CAR ; SWAP-TWO-ELEMENT에서 : 사용되지 않는 어휘 변수 COPYZ ; SWAP-TWO-ELEMENT에서 : 사용되지 않는 어휘 변수 NEWLIST ; SWAP-TWO-ELEMENT : 사용되지 않는 어휘 변수 X – user3511473

+0

역 추적 : 0 : (CCL :: APPEND-2 AB) 1 : (SWAP-TWO-ELEMENT (ABCD) 2 3) 2 : (CCL :: CALL- (CCL :: CHEAP-EVAL (SWAP-TWO-ELEMENT '(ABCD) 2 3)) – user3511473

답변

0

(swap-two-element '(a b c d) 2 3) 단어 values와 단어 set를 교체하고 당신은 갈 수 있습니다.

추신. 그래도 경고를 처리하고 알고리즘이 도움이 될 수 있도록 함수가 무엇을해야하는지 설명해야합니다.

+1

사실, OP는 이것 이후에 '잘된'것이 아니다.이 코드에는 다른 문제가있다. (예를 들어, 변수'car'는 묶이지 않는다. 기타.)). –

0

정말 정리가 필요합니다. 제목은 아무 것도 말하지 않고 코드 형식이 잘못되어 실제로 시작하려면 play around with loop해야합니다. 나는 당신이 당신의 해결책을 당신에게 시도해 볼 필요가 있기 때문에 당신에게주지 않을 것입니다. 다음은 과제 수행을 위해 사용할 수있는 예입니다.

;; this orders a list by their odd index 
;; NB: index starts at zero so first element is even 
(defun order-odd-index (list) 
    (loop :for element :in list    ; iterates your list 
     :for index :from 0     ; starts from 0 and goes on 
     :if (oddp index)      ; if in a loop 
      :collect element :into odd-list ; variable is automatically created 
     :else        ; else in a loop 
      :collect element :into even-list 
     :finally (return (append odd-list even-list)))) ; what to do in the end 

(order-odd-index '(4 67 3 2 7 9)) ; ==> (67 2 9 4 3 7) 

나는 키워드 (같은 :for 대신 for)이 기호 루프 키워드입니다 무엇을하지 않은 것을 나타 내기 위해 사용합니다. 그것은 선택 사항이지만 그것은 훨씬 깨끗해 보인다고 생각합니다.

이제 5 개의 변수로 요소를 수집하면 문제를 해결할 수 있습니다. 그 중 두 가지는 index가 인수로 주어진 장소 중 하나와 같을 때입니다. 다른 3은 앞과 뒤 사이에 있습니다. 마지막으로 당신은 단지 append의 변수를 올바른 순서로 완성 할 수 있습니다.

관련 문제