2017-10-25 5 views

답변

0

는 잘 모르겠어요 될 것이라고 작업을 기대하지만이처럼 정의 할 수 있습니다 :

str_join(list, delim) := block(
    if length(list) = 0 then return (""), 
    lreduce(
     lambda(
      [p,c], 
      if not(stringp(p)) then p: string(p), 
      if not(stringp(c)) then c: string(c), 
      concat(p, delim, c) 
     ), 
     list 
    ) 
); 
1

을 난 당신이 효과를 얻을 수 있다고 생각 ~{~} (출력의 반복)을 통해 printf에 생성합니다. 또한 ~^ (반복에서 탈출) 구문을 사용했음을 주목하십시오.

(%i5) printf (true, "~{~a~^:~}~%", [1,2,3,4]); 
1:2:3:4 
(%o5)        false 

? printf은 자세히 설명하지 않습니다. printf에 대한 출력 제어 연산자는 Common Lisp에서 직접 빌려 오므로 CL Hyperspec에서 정보를 찾을 수 있습니다. 참조 : http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm

EDIT : 문자열을 printf(false, ...)을 통해 표준 출력으로 출력하는 대신 반환 값으로 얻을 수 있습니다.

관련 문제