Lisp에서의 골프 팁


9

Lisp (모든 방언)에서 골프를 치기위한 일반적인 팁은 무엇입니까? 답변 당 하나의 팁을 게시하고 Lisp의 방언에만 해당하는 답변 만 게시하십시오 (예 : "댓글 제거"는 답변이 아님).

팁이 팁과 함께 적용되는 Lisp의 방언을 게시하십시오.



1
이것들이 Scheme과 Racket에서의 골프 팁과 구별 될 것이라고 생각하십니까 ?
Alex A.

1
골프를 즐기기 위해 작고 벗겨진 Lisp 버전 인 tinylisp을 사용하는 것이 좋습니다.
ckjbgames

답변:


4

공백을 최소화하기위한 함수 매개 변수 주문

대신에

(defun f(a b)(...))
...
(f x(1+ y))

같은 것을 시도하십시오

(defun f(b a)(...))
...
(f(1+ y)x)

1

인쇄 원자를 통해 대문자로 구성된 문자열 인쇄

princCommon Lisp 의 기능은 짧으며 이스케이프 문자가없는 객체를 인쇄합니다. synax가있는 Common Lisp 기호를 인쇄하면 인쇄 'symbol-name할 내용에 대한 따옴표가 필요하지 않으며 공백도 절약 할 수 있습니다. 심볼을 인쇄 할 때 대문자로 표시됩니다. 또한 개행이나 공백을 추가하지 않으므로 연결하지 않아도됩니다.

예를 들어

(princ'hai)

인쇄 HAI합니다.

(princ'hai)(princ(read))

인쇄 HAI하고 입력을 요청한 후 다시 인쇄합니다. 예를 들어 hello를 입력하면 결과는 다음과 같습니다.

HAIhellohello

1

증가 및 감소에 사용 1+1-

대신에 (+ a 1)또는 (- b 1)시도 (1+ a)(1- b).


나는 이것을 이해하지 못한다. 되지 않은 1+두 개의 토큰으로 구문 분석, 1그리고 +? 나는 생각했다 +1.
Esolanging 과일

Challenger5 @ 1+1-하나의 토큰으로 구문 분석 커먼 리스프 HyperSpec과 기능 1+, 1
ceilingcat

이름을 숫자로 시작할 수 없다고 생각 했습니까?
Esolanging 과일

이 @EsolangingFruit 입니다 ... 리스프
ASCII 전용

1

스테로이드 와 같은 사용 loop및 . 로마 숫자, 영어 숫자 및 영어 복수형은 물론 반복 및 조건이 포함됩니다. 매우 추악하고 컴팩트합니다.formatprintfformat


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)

첫 번째 인수 formatt, nilaka ()또는 스트림 중 하나 일 수 있습니다 . 통과하면 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. 문자 스트림으로 형식화 된 출력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.