lisp - 如何在 common lisp 的定义之前声明一个函数?

标签 lisp common-lisp

我将使用以下代码示例在 SBCL 中收到有关 f2 的未定义函数警告。 我是否可以像在 C 中一样先声明 f2 以避免警告。 我用谷歌搜索,没有任何线索。

(defun f ()
  (print (f2)))

(defun f2 ()
  (print "f2"))

最佳答案

如果在单个 compilation unit 中定义函数之前使用该函数,例如,相同的文件,那么编译器将不会提示未定义的函数(普通 load 仍然可能,所以先编译你的代码!)

否则,你可以declaim ftype :

(declaim (ftype (function () t) f2)

意味着 f2 不接受任何参数并返回一个 value类型 t .

但是,在定义已加载的情况下编译您使用该函数的文件更有意义。您可以(并且应该!)使用 asdf作为特定于 Lisp 的 make(1) : 指定依赖关系,以便编译器在编译用户时拥有所有函数的定义。

关于lisp - 如何在 common lisp 的定义之前声明一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837000/

相关文章:

macros - 这个宏有优势吗?

parsing - Common Lisp 的词法分析器和解析器生成器

macos - 从 Mac 终端编译/运行 Common LIsp

Emacs:禁用所有 Lisp 缓冲区的特定次要模式

emacs - 如何在 emacs 中查找 CL 函数定义

lisp - 今天 lisp 的用途是什么?您认为它的发展方向是什么?

ruby - 是否可以使用关键字参数传递函数

lambda - (self self) 在 let 语句中调用,用严格的语言

c - 识别 : eyes open/closed, 嘴巴张开/闭合、头部运动的库

lisp - 如何使用 Lisp 中的迭代函数打印列表中奇数位置的元素?