gpt4 book ai didi

emacs - 尝试使用粘液确定 emacs lisp 中的操作系统时出现未绑定(bind)变量错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:14 26 4
gpt4 key购买 nike

我试图通过在 emacs+slime 上运行的 lisp 程序确定系统的操作系统,使用来自互联网的代码(因为我是 lisp 的新手)。特别是,我使用以下代码:

;; check OS type
(cond
((string-equal system-type "windows-nt") ; Microsoft Windows
(progn
(message "Microsoft Windows") )
)
((string-equal system-type "darwin") ; Mac OS X
(progn
(message "Mac OS X")
)
)
((string-equal system-type "gnu/linux") ; linux
(progn
(message "Linux") )
)
)

(我在 this website 中找到了这段代码。)

我将上面的代码放在一个文件 (02.lisp) 中,在最后一个括号之后我按 C-c C-c 来编译它。但这给了我以下错误:

Unbound variable: SYSTEM-TYPE

   [Condition of type UNBOUND-VARIABLE]

当我将代码直接放在顶层时会发生同样的事情。这发生在我的 Windows 计算机上,我在 emacs+slime 的 lispbox 安装中运行 lisp 程序,在我的 Linux 计算机上,我通过 apt-get 在 emacs+slime 的标准 debian 安装中运行 lisp 程序。

为什么我会收到此错误,以及在常见的 lisp 中(在 .lisp 程序中)找出它在哪个操作系统中的正确方法是什么?提前非常感谢您,请记住我是 lisp+emacs 的新手,如果这是一个愚蠢/令人困惑的问题,我们深表歉意。

----编辑以添加有关我的问题的更多详细信息:

我希望能够在 lisp 程序 (02.lisp) 中执行此操作,因为我希望能够通过此 02.lisp 加载数据库。所以我计划实际使用上述方式的代码(我现在看到这是完全错误的,感谢 jch 的回答)如下:

(cond
((string-equal system-type "windows-nt") ; Microsoft Windows
(progn
(message "Microsoft Windows")
(with-open-file (in "g:/lisp programs/implications.db")
(with-standard-io-syntax
(setf *db* (read in))))
)
)
((string-equal system-type "gnu/linux") ; linux
(progn
(message "Linux")
(with-open-file (in "/media/NANO16GB/lisp programs/implications.db")
(with-standard-io-syntax
(setf *db* (read in)))
)
)))

我想要这个,因为我在两台计算机上处​​理这个程序,这取决于我在哪里,我希望程序从我的 USB 内存棒加载数据库。

所以问题是,如何确定我在哪个操作系统中运行程序,在 .lisp 程序中,以便使用适当的代码加载数据库。当然,帮助我在我的情况下加载数据库的不同代码会有所帮助,但现在我有兴趣从 .lisp 程序中确定操作系统,只是因为我不知道如何去做.

------------已解决:感谢 jch 的评论,我得到了以下有效的代码:

(cond
((string-equal (software-type) "Microsoft Windows") ; Microsoft Windows
(progn
(format t "Microsoft Windows")
(with-open-file (in "g:/lisp programs/implications.db")
(with-standard-io-syntax
(setf *db* (read in))))
)
)
((string-equal (software-type) "Linux") ; linux
(progn
(format t "Linux")
(with-open-file (in "/media/NANO16GB/lisp programs/implications.db")
(with-standard-io-syntax
(setf *db* (read in)))
)
)))

最佳答案

如果您将 Emacs 与 SLIME 一起使用,您会同时运行两个 Lisp 实现:

  • Emacs Lisp,它是 Emacs 的一部分,区分大小写,并定义了一个名为 message 的函数和一个变量 system-type
  • Common Lisp,不区分大小写,也没有定义。

您的问题是您正在尝试获取 Common Lisp 实现来评估 Emacs Lisp 代码。那是行不通的。

Emacs Lisp 代码应该放入以 .el 结尾的文件中,并且您可以使用 C-x C-e 计算表达式。 Common Lisp 代码应该放入以 .lisp 结尾的文件中,然后您告诉 SLIME 使用 C-c C-c 计算表达式。

关于emacs - 尝试使用粘液确定 emacs lisp 中的操作系统时出现未绑定(bind)变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26528808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com