Lời khuyên cho việc chơi golf ở Lisp


9

Những lời khuyên chung nào dành cho việc chơi golf ở Lisp (bất kỳ phương ngữ nào)? Vui lòng gửi một mẹo cho mỗi câu trả lời và chỉ những câu trả lời dành riêng cho một phương ngữ của Lisp (ví dụ: "xóa nhận xét" không phải là câu trả lời).

Vui lòng gửi phương ngữ của Lisp mẹo của bạn áp dụng với mẹo của bạn.



1
Bạn có tưởng tượng những điều này sẽ khác biệt với những mẹo chơi golf trong Scheme và Vợt không?
Alex A.

1
Tôi sẽ khuyên bạn nên sử dụng tinylisp, một phiên bản rút gọn của Lisp cho niềm vui chơi gôn của bạn.
ckjbgames

Câu trả lời:


4

Sắp xếp các tham số chức năng để giảm thiểu khoảng trắng

Thay vì

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

thử một cái gì đó như

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

1

Chuỗi in bao gồm chữ in hoa thông qua các nguyên tử in

Các princchức năng trong Common Lisp là ngắn, và sẽ in đối tượng mà không characers thoát. Nếu bạn in các ký hiệu Lisp thông thường, có synax 'symbol-name, điều này giúp bạn không cần trích dẫn xung quanh những gì bạn muốn in và cũng có thể lưu vào khoảng trắng. Lưu ý rằng khi in biểu tượng, chúng sẽ được viết hoa. Ngoài ra, nó không thêm một dòng mới hoặc một khoảng trắng, vì vậy bạn không cần nối.

Ví dụ,

(princ'hai)

sẽ in HAI.

(princ'hai)(princ(read))

sẽ in HAI, yêu cầu nhập liệu và in ra, ví dụ nếu bạn nhập hello, kết quả là

HAIhellohello

1

Sử dụng 1+1-để tăng và giảm

Thay vì (+ a 1)hoặc (- b 1)thử (1+ a)hoặc (1- b).


Tôi không hiểu điều này. Không được 1+phân tích thành hai mã thông báo, 1+? Tôi nghĩ rằng nó là +1.
Trái cây Esolanging

@ Challenger5 1+1-được phân tích cú pháp dưới dạng một mã thông báo chung Lisp HyperSpec Chức năng 1+, 1-
trần nhà

Tôi nghĩ rằng tên không thể bắt đầu bằng chữ số?
Quả Esolanging

@Esolanging Quả này Lisp ...
ASCII chỉ có

1

Sử dụng loopformat, giống như printftrên steroid. formatbao gồm lặp và điều kiện, cũng như chữ số La Mã, số tiếng Anh và số nhiều tiếng Anh. Nó rất, rất xấu, và rất nhỏ gọn.


1

Đầu ra có điều kiện

GNU Common Lisp

~v^

Các up-and-out chỉ thị ~^thường được sử dụng trong một danh sách định dạng hoạt động để chấm dứt sau khi mục danh sách cuối cùng. Tuy nhiên, nó cũng có thể được sử dụng với một công cụ vsửa đổi để sử dụng một đối số, trong trường hợp đó, nó chấm dứt nếu đối số đó bằng không. Điều này đặc biệt hữu ích để đối phó với số không được tạo ra bởi 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)

Đối số đầu tiên để format có thể là một trong t, nilhay còn gọi là ()một luồng. Nếu được thông qua t, nó sẽ xuất ra stdout, nếu nilnó sẽ trả về đầu ra được định dạng dưới dạng chuỗi. Điều này có thể được sử dụng đầu ra có điều kiện. Ví dụ trên có thể được viết bằng nhau như:

(dotimes(n 11)(format(> n 0)"~d~%"n))

Nếu một giá trị là đầu ra, giá trị trả về sẽ là nil. Do đó, nó cũng có thể được sử dụng làm điều kiện kết thúc cho một dovòng lặp:

(do((n 11))((<(decf n)1))(format t"~d~%"n))

(do((n 11))((format(>(decf n)0)"~d~%"n)))

~[...~]

Trình định dạng có điều kiện tiêu thụ một đối số và chọn một chuỗi định dạng từ danh sách theo chỉ mục. Một trường hợp sử dụng phổ biến là với trình định dạng mặc định ~:;để chọn giữa 0 và không 0.

(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))

Các trình định dạng có điều kiện cũng có thể được lồng vào nhau, trong trường hợp đó, mỗi lần sẽ tiêu thụ một đối số.


~&

Trong mỗi ví dụ trên, ~%được sử dụng để phát ra một dòng mới. Trong hầu hết các trường hợp, điều này có thể được thay thế bằng một dòng mới. Một tùy chọn khác là sử dụng ~&, nó sẽ phát ra một dòng mới khi và chỉ khi con trỏ đầu ra không ở đầu dòng, còn gọi là a fresh-line.

Cả hai ~%~&cũng có thể lấy một đối số, với một vsửa đổi hoặc là một hằng số, và sẽ tạo ra nhiều dòng mới. Cả hai cũng sẽ vui vẻ chấp nhận một cuộc tranh luận tiêu cực, trong trường hợp đó họ không phát ra gì.


Tài liệu tham khảo bên ngoài

Thực hành chung Lisp
18. Một vài công thức FORMAT

Ngôn ngữ chung Lisp, Phiên bản 2
22.3.3. Định dạng đầu ra cho các luồng ký tự

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.