2009-11-05 2 views
2

작고 재미있는 문제가 있지만 완벽하게 해결할 수는 없지만 도움을 주거나 힌트를 주시면 감사하겠습니다. 문제는 :Lisp을 사용하여 목록 다시 인쇄

어떤 목록 주어진

이 같은 말 '(ABC), 우리가 그것을 변환됩니다에'[ABC] 또는 '(A (BC)), 우리가 변환됩니다'[A [BC]

즉, 함수는 LISP에서 PRINT와 동일한 작업을 수행해야합니다. 단, 대괄호를 대괄호로 변경해야합니다. 단순히 문자열로 인쇄 한 다음 괄호를 대괄호로 바꾸는 방법은 중요하지 않습니다. 제발 좀 생각해 줘, 고마워.

+0

숙제 같은 냄새가납니다. 지금까지 뭐 해봤 어? –

+0

들으 로버트 내가 지금 (defun는 쇼 목록 (LST) (COND ((그리고 (원자 LST) (하지 (널 LST))) (형식 t "~ A"LST) 코드를 가지고) ((널 LST) (형식 t "]"LST)) (t (형식 t "[") (쇼리스트 (자동차 LST)) (mapcar 등등 번호 '쇼리스트 (butlast (cdr lst))) (형식 t "]")) ))) – Kevin

답변

2

Format Recipes 내 테이크의 목록이 발생하는 경우, 오프닝 브래킷을 인쇄, 인쇄 내용을 재귀 적으로, 필요한 경우 객체 뒤에 공백을 추가 한 다음 닫는 대괄호를 인쇄합니다. prin1을 사용하여 모든 비 목록 객체를 인쇄하십시오. prin1은 "출력 가능한 출력"프린터입니다.

0

이것은 훌륭한 책 : Practical Common Lisp입니다.

당신은 서둘러에 있다면 당신은 여기에서 시작 할 수 있습니다이 :이다

(defun bprint (object) 
    (typecase object 
    (cons 
    (write-char #\[) 
    (do ((list object (rest list))) 
     ((endp list) (write-char #\])) 
     (bprint (first list)) 
     (when (rest list) 
     (write-char #\Space)))) 
    (t 
    (prin1 object))) 
    t) 

가 : List Processing와 여기

관련 문제