2013-08-08 44 views
6

Tôi đã tìm thấy một ví dụ tuyệt vời về kiểm tra kiểu trong LispWorks Hyper Spec, nhưng liên kết "type specifier" dẫn đến một thuật ngữ không phải là ký hiệu, và tôi có một chút nhầm lẫn với cú pháp.Tìm hiểu về kiểu số trong Common Lisp

Trong (check-type n (integer 0 *) "a positive integer") nghĩa là gì (integer 0 *) có nghĩa là gì? Tôi giả sử nó có nghĩa là phạm vi bao gồm từ 0 đến vô cùng, nhưng là như vậy?

+0

nó có nghĩa là bất kỳ số nguyên bằng hoặc lớn hơn sau đó không (đầu tiên là giới hạn dưới thứ hai là giới hạn cao hơn). –

Trả lời

4

Có, bạn có thể sử dụng các loại thông số trong lisp chung, chúng có thể rất mạnh nếu trình biên dịch của bạn chọn sử dụng chúng. Mặc dù bạn có thể tìm thấy cách sử dụng cho loại séc, các loại thông số kỹ thuật phổ biến nhất có dạng là declarations.

Biểu thức declare không chỉ được sử dụng cho các loại tuy nhiên nó có một số declaration identifiers và triển khai lisp phổ biến là thực sự miễn phí để thêm của riêng mình.

Bit bạn quan tâm mặc dù là 'types' và cụ thể hơn là 'Type Specifiers'. Trang đó sẽ cung cấp cho bạn trình đơn thấp về nhiều cách để chỉ định các loại, bao gồm cách bạn đã đề cập trong câu hỏi của mình.

Xin lưu ý rằng triển khai của bạn không phải sử dụng các khai báo mà nó có thể bỏ qua chúng! Here is some more info on that.

Và đối với một số mã ví dụ, đây là ví dụ giúp tôi hiểu các khái niệm cơ bản về cách hoạt động của nó. Here và nhiều hơn nữa here.

Từ 4.2.3 Type Specifiers:

Nếu xác định kiểu là một danh sách, chiếc xe của danh sách là một biểu tượng, và phần còn lại của danh sách là loại thông tin công ty con. Loại số được gọi là trình chỉ định loại hợp chất. Ngoại trừ một cách rõ ràng được nêu khác đi, các mục công ty con có thể không được chỉ định. các chi tiết phụ trợ không xác định được biểu thị bằng cách viết *. Ví dụ: để chỉ định hoàn toàn một véc tơ, loại phần tử và chiều dài của vectơ phải có mặt.

(vector double-float 100) 

Sau đây lá chiều dài không xác định:

(vector double-float *) 

Sau đây lá các loại nguyên tố không xác định:

(vector * 100)