CLisp 11:使用 type-of 确定对象的类型

本文介绍LISP语言中如何使用type-of函数进行类型检查,并提供多种数据类型的示例。此外,还探讨了如何验证参数是否为特定类型,如哈希表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在LISP中定义一个加法函数
(defun my-add (x y) (+ x y))
但是,调用者可以输入任意类型的参数,导致异常。大部分情况下,调用者知道该输入什么

类型的参数,但是,某些情况下需要函数内部校验输入参数的类型。
这时就该使用 type-of 函数,type-of的返回值还真复杂,使用时要特别小心。

 

(type-of '()) => NULL
(type-of t)   => BOOLEAN
(type-of 'a)  => SYMBOL
(type-of 0)   => BIT
(type-of 1)   => BIT
(type-of 2)   => (INTEGER 0 16777215)
(type-of -1)  => (INTEGER -16777216 (0))
(type-of 0.0) => SINGLE-FLOAT
(type-of #\a) => STANDARD-CHAR
(type-of "abc")  => (SIMPLE-BASE-STRING 5)
(type-of #'sin)  => COMPILED-FUNCTION
(type-of #'(lambda(x) (+ 1 x)))  => FUNCTION
(type-of '(a b c))     => CONS
(type-of (cons 'a 'b)) => CONS
(type-of (make-hash-table))  => HASH-TABLE
(type-of (make-array 3))     => (SIMPLE-VECTOR 3)
(type-of (make-array '(3 4)))=> (SIMPLE-ARRAY T (3 4))
(type-of (open "test.txt"))  => FILE-STREAM
(type-of (defpackage fff))   => PACKAGE
(type-of (/ 1 2))            => RATIO
(type-of #c(2 1))            => COMPLEX

 

例如,判断一个参数是不是哈希表
(eq 'hash-table (type-of x))
上面的写法有点硬编码的坏味道,总感觉和CLisp的实现版本有关,或许可以这样写
(eq (make-hash-table) (type-of x))

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值