Anonymous user
Define a primitive data type: Difference between revisions
→Common Lisp: new example
(add Ruby) |
(→Common Lisp: new example) |
||
Line 258:
unsigned char value; // we don't need more space
};</lang>
=={{header|Common Lisp}}==
The built-in integer type specifier provides range parameters. <code>deftype</code> may be used to define an alias for it.
<lang lisp>(deftype one-to-ten ()
'(integer 1 10))</lang>
For a bounds check, one may use <code>typep</code> (a predicate) or <code>check-type</code> (signals an error if not of the type).
<lang lisp>(defun word (i)
(check-type i one-to-ten)
(case i
(1 "one")
(2 "two")
(3 "three")
(4 "four")
(5 "five")
(6 "six")
(7 "seven")
(8 "eight")
(9 "nine")
(10 "ten")))</lang>
(Note that the above can be written without the separate check-type by using <code>ecase</code> instead of <code>case</code>, which signals an error when no case matches.)
To inform the compiler that a variable will be of a certain type, permitting optimizations, use a declaration:
<lang lisp>(dolist (i numbers)
(declare (type one-to-ten i))
...)</lang>
Note, however, that the standard does not specify what happens in the event that a declaration is false (though [[SBCL]], for example, does perform type checks on any declaration except when <code>safety</code> is 0); use <code>check-type</code> for portable bounds checks.
=={{header|E}}==
|