Các mẹo sau đây dành cho vợt :
Đối số mặc định
Đặc biệt hữu ích để tạo bí danh cho các tên hàm dài được sử dụng thường xuyên.
Giả sử golf cho phép bạn viết một hàm tiêu thụ đối số và giả sử bạn cần sử dụng reverse
nhiều. Bạn sẽ bắt đầu với một cái gì đó như:
(λ(x) ... reverse ... reverse ... reverse ...
Thay vào đó, bạn có thể tham gia một đối số bổ sung, với tên ngắn hơn reverse
và đặt giá trị mặc định của nó thành reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
Hơn nữa, nó hữu ích nếu bạn có chức năng trợ giúp mà bạn sử dụng ở nhiều nơi với một số đối số tương tự. Hãy nhớ sắp xếp lại các đối số cho hàm nếu cần, để bạn có thể sử dụng càng nhiều đối số mặc định càng tốt và xóa các đối số khỏi nhiều lệnh gọi.
match
Bài này khó hơn một chút để tóm tắt trong một bài viết nhỏ, vì vậy hãy đọc trên Tài liệu vợt cho bài này. Tóm lại, match
cho phép bạn trích xuất các phần tử và chuỗi các phần tử theo một thứ tự nhất định từ một danh sách và cú pháp quasiquote cho phép bạn ghép danh sách bị cắt lại với nhau:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
Nó cũng cung cấp cho bạn một cách dễ dàng để làm việc với các biểu thức thông thường và thực hiện tính toán bổ sung cho các nhóm kết quả sau đó,
Đặt tên let
Xem cú pháp được đặt tên ở đây .let proc-id ...
Điều này cho phép bạn viết các hàm đệ quy được gọi ngay lập tức mà không define
hoặc thực sự gọi hàm sau khi bạn đã xác định nó.
Cái gì đó như:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
có thể rút ngắn thành:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Cái cuối cùng này thật ngớ ngẩn, nhưng tôi chưa thể sử dụng thủ thuật nhỏ này ở bất cứ đâu cho đến nay:
(apply map list matrix)
chuyển vị trí matrix
, trong đó matrix
có một số danh sách hình chữ nhật của danh sách, như thế nào '((1 2 3) (a b c))
.
Hãy cho tôi biết nếu điều này không hữu ích.