Lisp (모든 방언)에서 골프를 치기위한 일반적인 팁은 무엇입니까? 답변 당 하나의 팁을 게시하고 Lisp의 방언에만 해당하는 답변 만 게시하십시오 (예 : "댓글 제거"는 답변이 아님).
팁이 팁과 함께 적용되는 Lisp의 방언을 게시하십시오.
Lisp (모든 방언)에서 골프를 치기위한 일반적인 팁은 무엇입니까? 답변 당 하나의 팁을 게시하고 Lisp의 방언에만 해당하는 답변 만 게시하십시오 (예 : "댓글 제거"는 답변이 아님).
팁이 팁과 함께 적용되는 Lisp의 방언을 게시하십시오.
답변:
princ
Common Lisp 의 기능은 짧으며 이스케이프 문자가없는 객체를 인쇄합니다. synax가있는 Common Lisp 기호를 인쇄하면 인쇄 'symbol-name
할 내용에 대한 따옴표가 필요하지 않으며 공백도 절약 할 수 있습니다. 심볼을 인쇄 할 때 대문자로 표시됩니다. 또한 개행이나 공백을 추가하지 않으므로 연결하지 않아도됩니다.
예를 들어
(princ'hai)
인쇄 HAI
합니다.
과
(princ'hai)(princ(read))
인쇄 HAI
하고 입력을 요청한 후 다시 인쇄합니다. 예를 들어 hello를 입력하면 결과는 다음과 같습니다.
HAIhellohello
1+
및1-
대신에 (+ a 1)
또는 (- b 1)
시도 (1+ a)
나 (1- b)
.
1+
두 개의 토큰으로 구문 분석, 1
그리고 +
? 나는 생각했다 +1
.
GNU 공통 리스프
~v^
-와 - 아웃 지시어는 ~^
가장 일반적으로 마지막 목록 항목 이후에 종료하는 작업을 포맷 목록에서 사용된다. 그러나 v
수정자를 사용하여 인수를 사용할 수도 있습니다 .이 경우 해당 인수가 0이면 종료됩니다. 이는에서 생성 된 0을 처리하는 데 특히 유용합니다 dotimes
.
(loop as n from 1 to 10 do(format t"~d~%"n))
(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))
(dotimes(n 11)(format t"~v^~d~%"n n))
format(condition)
첫 번째 인수 format
는 t
, nil
aka ()
또는 스트림 중 하나 일 수 있습니다 . 통과하면 t
, 그것은 출력을 의지 stdout
하는 경우, nil
이 문자열로 형식화 된 출력을 반환합니다. 조건부 출력으로 사용할 수 있습니다. 위 예제는 다음과 같이 짧게 작성 될 수 있습니다.
(dotimes(n 11)(format(> n 0)"~d~%"n))
값이 출력되면 반환 값은입니다 nil
. 이 때문에 do
루프 의 종료 조건으로도 사용할 수 있습니다 .
(do((n 11))((<(decf n)1))(format t"~d~%"n))
(do((n 11))((format(>(decf n)0)"~d~%"n)))
~[...~]
조건부 포맷터는 인수를 사용하고 인덱스별로 목록에서 형식화 문자열을 선택합니다. 일반적인 사용 사례는 기본 포맷터 ~:;
를 사용하여 0이 아닌 0을 선택하는 것입니다.
(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))
조건부 포맷터도 중첩 될 수 있으며,이 경우 각각 인수가 차례로 사용됩니다.
~&
위의 각 예 ~%
에서 개행을 생성하는 데 사용됩니다. 대부분의 경우 이것은 리터럴 개행 문자로 대체 될 수 있습니다. 또 다른 옵션은을 사용 ~&
하는 것인데,이 명령은 출력 커서가 줄의 시작 부분에 있지 않은 경우에만 줄 바꿈을 방출합니다 fresh-line
.
모두 ~%
와 ~&
도 함께 인수를 취할 수 v
일정한 수정 또는으로, 많은 줄 바꿈으로 생성합니다. 그들은 또한 부정적인 주장을 기꺼이 받아들이며,이 경우 아무 것도 방출하지 않습니다.
실질적인 공통 리스프
18. 몇 가지 형식 조리법
공용어 언어, 제 2 판
22.3.3. 문자 스트림으로 형식화 된 출력