当前位置:  开发笔记 > 开发工具 > 正文

Lisp:CHAR既未声明也未绑定

如何解决《Lisp:CHAR既未声明也未绑定》经验,为你挑选了1个好方法。

我几天前决定学习(普通)Lisp,我意识到这是一个相当新的问题,对于至少有一点经验的人来说,这可能是非常微不足道的.

所以基本上发生的是我加载Emacs + Slime(通过盒子中的Lisp)并编写我的程序(包含在下面):

(defun last-char (s) "Get last character"
       (char s (- (length s) 1)))

然后我尝试编译它C - c M - k,但后来我收到以下警告:

CHAR既未声明也未绑定,它将被视为已声明为SPECIAL.

这个警告是什么意思?我想它可能类似于忘记C中的#includes,但我无法弄明白.我该怎么办呢?我只是简单地忽略它吗?



1> Pinochle..:

警告意味着char由于某种原因(它报告该符号未绑定,它没有值),因此它不应被识别为函数.

它可能与您的实现有关.我在我的SBCL + Emacs/Slime(和Clozure)中使用Cc Mk运行代码,我从SBCL的编译中得到以下报告:

; in: DEFUN LAST-CHAR
;     (CHAR S (- (LENGTH S) 1))
; --> AREF 
; ==>
;   (SB-KERNEL:HAIRY-DATA-VECTOR-REF ARRAY SB-INT:INDEX)
; 
; note: unable to
;   optimize
; due to type uncertainty:
;   The first argument is a STRING, not a SIMPLE-STRING.
; 
; note: unable to
;   avoid runtime dispatch on array element type
; due to type uncertainty:
;   The first argument is a STRING, not a SIMPLE-ARRAY.

试着打字吧

#'char 

在REPL上,响应应该是它被报告为一个函数,

CL-USER> #'char
#

但也许它不在您的实现中(我猜它没有,考虑到编译器警告和代码在SBCL中正确编译的事实).如果是这种情况,那么这就是你的实现偏离ANSI Common Lisp规范的一个点,因为该函数应该存在.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有