Lisp包名在我的数据中预先添加了自己,而我没有告诉它
这是我第一次使用lisp处理包。在封装数据和代码方面,我大致了解了它们的工作原理。它似乎与其他语言非常相似,我现在不需要担心它们之间的差异 但是,我遇到了一个问题,如果我在代码中设置了以下内容:Lisp包名在我的数据中预先添加了自己,而我没有告诉它,lisp,Lisp,这是我第一次使用lisp处理包。在封装数据和代码方面,我大致了解了它们的工作原理。它似乎与其他语言非常相似,我现在不需要担心它们之间的差异 但是,我遇到了一个问题,如果我在代码中设置了以下内容: (setf baseNames '(coffee wax blue chili stink green soy blackeyed garden)) 随后将以以下形式发布: (print baseNames) (PIZZABAGEL::COFFEE PIZZABAGEL::WAX PIZZABAGEL
(setf baseNames '(coffee wax blue chili stink green soy blackeyed garden))
随后将以以下形式发布:
(print baseNames)
(PIZZABAGEL::COFFEE PIZZABAGEL::WAX PIZZABAGEL::BLUE PIZZABAGEL::CHILI PIZZABAGEL::STINK PIZZABAGEL::GREEN
比萨面包圈::大豆比萨面包圈::黑眼比萨面包圈::花园)
比萨饼是我包裹的名字。这是正常的行为吗?假设我想做一些类似的事情:
(position 'WAX baseNames)
我希望它会返回1,但由于包名在任何地方都在其前面,因此它会返回nil。我想知道我如何才能a)让它不在任何地方都预先准备好,或者b)使用它的正常做法是什么?我目前正在编写我自己的position函数,希望能够处理这个问题,但在这种情况下,这样做似乎是错误的。提前感谢您提供的任何提示或建议。您遇到的是一些软件包混乱 无论何时使用读取器读取符号,该符号都会隐式继承当前包的包名 您可以在此处看到演示:
1]> (setf baseNames '(coffee wax blue chili stink green soy blackeyed garden))
(COFFEE WAX BLUE CHILI STINK GREEN SOY BLACKEYED GARDEN)
[2]> (export 'basenames)
T
[3]> (defpackage so (:use cl-user cl))
#<PACKAGE SO>
[4]> (in-package so)
#<PACKAGE SO>
SO[5]> (print basenames)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
这会失败,因为它在基名中查找
SO::WAX
(因为我们在SO
包中),而不是COMMON-LISP-USER::WAX
。这就是列表中的内容。这就是为什么失败的原因。(CL-USER
是COMMON-LISP-USER
的缩写/别名)您遇到的是一些软件包混乱
无论何时使用读取器读取符号,该符号都会隐式继承当前包的包名
您可以在此处看到演示:
1]> (setf baseNames '(coffee wax blue chili stink green soy blackeyed garden))
(COFFEE WAX BLUE CHILI STINK GREEN SOY BLACKEYED GARDEN)
[2]> (export 'basenames)
T
[3]> (defpackage so (:use cl-user cl))
#<PACKAGE SO>
[4]> (in-package so)
#<PACKAGE SO>
SO[5]> (print basenames)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
这会失败,因为它在基名中查找
SO::WAX
(因为我们在SO
包中),而不是COMMON-LISP-USER::WAX
。这就是列表中的内容。这就是为什么失败的原因。(CL-USER
是COMMON-LISP-USER
的缩写/别名)您遇到的是一些软件包混乱
无论何时使用读取器读取符号,该符号都会隐式继承当前包的包名
您可以在此处看到演示:
1]> (setf baseNames '(coffee wax blue chili stink green soy blackeyed garden))
(COFFEE WAX BLUE CHILI STINK GREEN SOY BLACKEYED GARDEN)
[2]> (export 'basenames)
T
[3]> (defpackage so (:use cl-user cl))
#<PACKAGE SO>
[4]> (in-package so)
#<PACKAGE SO>
SO[5]> (print basenames)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
这会失败,因为它在基名中查找
SO::WAX
(因为我们在SO
包中),而不是COMMON-LISP-USER::WAX
。这就是列表中的内容。这就是为什么失败的原因。(CL-USER
是COMMON-LISP-USER
的缩写/别名)您遇到的是一些软件包混乱
无论何时使用读取器读取符号,该符号都会隐式继承当前包的包名
您可以在此处看到演示:
1]> (setf baseNames '(coffee wax blue chili stink green soy blackeyed garden))
(COFFEE WAX BLUE CHILI STINK GREEN SOY BLACKEYED GARDEN)
[2]> (export 'basenames)
T
[3]> (defpackage so (:use cl-user cl))
#<PACKAGE SO>
[4]> (in-package so)
#<PACKAGE SO>
SO[5]> (print basenames)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
(COMMON-LISP-USER::COFFEE COMMON-LISP-USER::WAX COMMON-LISP-USER::BLUE
COMMON-LISP-USER::CHILI COMMON-LISP-USER::STINK COMMON-LISP-USER::GREEN
COMMON-LISP-USER::SOY COMMON-LISP-USER::BLACKEYED COMMON-LISP-USER::GARDEN)
这会失败,因为它在基名中查找
SO::WAX
(因为我们在SO
包中),而不是COMMON-LISP-USER::WAX
。这就是列表中的内容。这就是为什么失败的原因。(CL-USER
是COMMON-LISP-USER
的缩写/别名)对位置的调用已经错误。“我希望这将返回1”。我希望它返回NIL
。可能是阅读位置的文档的好时机:这是什么,的软件实现-PRainer Joswig,我的意思是在我上面的位置调用中不要在蜡周围键入括号。我会编辑它来修正我的打字错误。当我在clisp解释器中运行(position'wax'(chili-wax-blue))时,它提供了我期望的结果。文档中还有什么我应该看的吗?雷纳,我明白你想告诉我的。我的位置函数没有使用正确的测试。它默认为=而不是等于。对位置的调用已经错误。“我希望这将返回1”。我希望它返回NIL
。可能是阅读位置的文档的好时机:这是什么,的软件实现-PRainer Joswig,我的意思是在我上面的位置调用中不要在蜡周围键入括号。我会编辑它来修正我的打字错误。当我在clisp解释器中运行(position'wax'(chili-wax-blue))时,它提供了我期望的结果。文档中还有什么我应该看的吗?雷纳,我明白你想告诉我的。我的位置函数没有使用正确的测试。它默认为=而不是等于。对位置的调用已经错误。“我希望这将返回1”。我希望它返回NIL
。可能是阅读位置的文档的好时机:这是什么,的软件实现-PRainer Joswig,我的意思是在我上面的位置调用中不要在蜡周围键入括号。我会编辑它来修正我的打字错误。当我在clisp解释器中运行(position'wax'(chili-wax-blue))时,它提供了我期望的结果。文档中还有什么我应该看的吗?雷纳,我明白你想告诉我的。我的位置函数没有使用正确的测试。它默认为=而不是等于。对位置的调用已经错误。“我希望这将返回1”。我希望它返回NIL
。可能是阅读位置的文档的好时机:这是什么,的软件实现-PRainer Joswig,我的意思是在我上面的位置调用中不要在蜡周围键入括号。我会编辑它来修正我的打字错误。当我在clisp解释器中运行(position'wax'(chili-wax-blue))时,它提供了我期望的结果。文档中还有什么我应该看的吗?雷纳,我明白你想告诉我的。我的位置函数没有使用正确的测试。使用包CL-USER