2013-08-08 8 views
6

LispWorks Hyper Specの型チェックの素晴らしい例が見つかりましたが、 "型指定子"リンクは単なる表記ではなく、構文と少し混乱しています。Common Lispでの型指定子の理解

(check-type n (integer 0 *) "a positive integer")(integer 0 *)はどういう意味ですか? 0から無限までの包括的範囲を意味すると仮定しますが、これはそうですか?

+0

(vector double-float *) 

以下が指定されていない要素タイプを残す:

(vector double-float 100) 

以下は不特定長さを残し下限の2番目は上限です)。 –

答えて

4

はい、タイプ指定子は共通のlispで使用できますが、コンパイラがそれらを使用することを選択すると非常に強力になります。チェックタイプの用途があるかもしれませんが、最も一般的なタイプの仕様はdeclarationsという形式です。

declareの式はタイプに使用されるだけでなく、数字がdeclaration identifiersであり、一般的なlisp実装では実際に自由に追加できます。

あなたが興味を持っているビットは'types'で、より具体的には'Type Specifiers'です。そのページでは、あなたの質問で言及した方法を含めて、タイプを指定するさまざまな方法について、あなたには低い評価を与えてくれます。

ここでも、実装で宣言を使用する必要はなく、無視することができることに注意してください。 Here is some more info on that.

いくつかのコード例では、これがどのように動作するかの基本を理解した例があります。 Here以上here4.2.3 Type Specifiersから

型指定子がリストの場合は、リストの車がシンボルであり、リストの 残りは子会社型情報です。そのようなタイプの 指定子は複合型指定子と呼ばれます。明示的に が記載されている場合を除き、子会社の項目は特定できません。 不特定子会社の項目は、*と書かれています。たとえば、ベクターを完全に指定するには、 とし、要素のタイプとベクターの長さを指定する必要があります。それは任意の整数に等しい又は最初は(ゼロより大きい意味

(vector * 100) 
関連する問題