常见的lisp相当于一个python习语

saq*_*aq7 3 lisp python common-lisp

如何在Lisp中运行此Python命令的等效命令

from lib import func
Run Code Online (Sandbox Code Playgroud)

例如,我想使用该split-sequence包,特别是我只想要该split-sequence包中的方法.

目前,我必须使用它(split-sequence:split-sequence #\Space "this is a string").

但我想做的是(split-sequence #\Space "this is a string").

如何在不使用软件包名称对其进行限定的情况下直接访问该函数?

cor*_*ump 7

你想要做的只是:

(import 'split-sequence:split-sequence)
Run Code Online (Sandbox Code Playgroud)

这在REPL中工作正常,但如果你想组织你的符号,你最好依赖于包.

(defpackage #:my-package 
   (:use #:cl)
   (:import-from #:split-sequence 
                 #:split-sequence))
Run Code Online (Sandbox Code Playgroud)

首先split-sequence是包装,其次是应导入的所有符号.在DEFPACKAGE表单中,人们通常使用上述关键字或未加密符号,以避免当前包中的内部符号.或者,您可以使用字符串,因为只有符号的名称很重要:

 (defpackage "MY-PACKAGE"
   (:use "CL")
   (:import-from "SPLIT-SEQUENCE" "SPLIT-SEQUENCE"))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,尽管这是正确的答案,但语义与python的语义完全不同:特别是CL习语意味着在两个包中都可以看到单个名称(符号),而在Python中,单个对象由两个不同的名称引用. (4认同)