Common lisp 通用Lisp术语和文档

Common lisp 通用Lisp术语和文档,common-lisp,read-eval-print-loop,sbcl,Common Lisp,Read Eval Print Loop,Sbcl,我知道公共Lisp REPL提供的强大功能。我专门使用SBCL实现。但是,我不确定我的REPL是否正确设置,我想知道如何从REPL中获得更多的能量 例如,我想找到计算机2^3=8的幂函数。这在许多其他语言中称为pow或power。所以我做了: CL-USER> (apropos 'pow) POW

我知道公共Lisp REPL提供的强大功能。我专门使用SBCL实现。但是,我不确定我的REPL是否正确设置,我想知道如何从REPL中获得更多的能量

例如,我想找到计算机2^3=8的幂函数。这在许多其他语言中称为
pow
power
。所以我做了:

CL-USER> (apropos 'pow)
    POW                                                                                                                                                                          
    POWER                                                                                                                                                                        
    :OP-POWER-EXT (bound)                                                                                                                                                        
    :POWERPC (bound)                                                                                                                                                             
    SB-IMPL::*INTEGER-READER-BASE-POWER* (bound)                                                                                                                                 
    SB-IMPL::*POWER-CACHE* (bound)                                                                                                                                               
    SB-IMPL::+POWER-CACHE-INTEGER-LENGTH-LIMIT+ (bound)                                                                                                                          
    SB-IMPL::COMPUTE-POWERS                                                                                                                                                      
    SB-IMPL::POWER                                                                                                                                                               
    SB-IMPL::POWERS-FOR-BASE (fbound)                                                                                                                                            
    SB-INT:POWER-OF-TWO-CEILING (fbound)                                                                                                                                         
    SB-KERNEL:%POW (fbound)                                                                                                                                                      
    SB-KERNEL::POWER                                                                                                                                                             
    SB-KERNEL:SCRUB-POWER-CACHE (fbound)                                                                                                                                         
    ; No value
我将如何查看这些函数的文档?在查看文档之前,是否需要“导入”这些“库”?我经常发现文档缺失,因为REPL将返回
nil.
文档在哪里?例如,我做到了:

CL-USER> (documentation 'power 'function)
它刚刚返回了
NIL
,但是从上面的
apropos
列表中可以看到,
power
存在

总结:

  • 如何找到函数、数据类型、变量等的文档。。。(还有什么可以查找文档?)
  • SB-IMPL
    SB-KERNEL
    库是否已经导入
  • 谢谢你的帮助

    它只是返回了零,但正如你从上面给出的列表中看到的 恰如其分,权力是存在的

    符号
    power
    存在,但请注意,它不像其他一些符号那样是
    bound
    fbound
    。因此is没有函数或值绑定。存在很多符号,即使它们没有函数或值绑定。这在
    apropos
    中尤其令人沮丧,因为如果您执行
    (apropos的名称)
    ,那么在阅读表单时,您已经确保有一个符号
    name
    。有时你会看到人们使用非预期符号符号来避免这个问题。例如:

    CL-USER> (apropos 'this-already-got-interned)
    THIS-ALREADY-GOT-INTERNED
    ; No value
    CL-USER> (apropos '#:but-this-didnt\!)
    ; No value
    
    然而,即使
    power
    确实有一个函数或值绑定,也不能保证有可用的文档。请注意,报告中说:

    文档字符串可用于调试目的。 符合要求的程序允许在以下情况下使用文档字符串: 他们在场,但不应依赖于他们的正确行为 这些文档字符串的存在。一个实现是 允许在任何时候丢弃文档字符串,以便 执行定义的原因

    也就是说,您仍然可以尝试,有时您会得到有用的结果:

    CL-USER> (apropos '#:expt)
    EXPT (fbound)
    SB-C::EXPT-DERIVE-TYPE-AUX (fbound)
    SB-C::EXPT-DERIVE-TYPE-OPTIMIZER (fbound)
    ...
    ; No value
    CL-USER> (documentation 'expt 'function)
    "Return BASE raised to the POWER."
    
    通常,如果您想了解有关对象的更多信息,可以使用()。输出没有具体定义,但可能包括以下文档:

    CL-USER> (describe 'expt)
    COMMON-LISP:EXPT
      [symbol]
    
    EXPT names a compiled function:
      Lambda-list: (BASE POWER)
      Declared type: (FUNCTION (NUMBER NUMBER) (VALUES NUMBER &OPTIONAL))
      Documentation:
        Return BASE raised to the POWER.
      Source file: SYS:SRC;CODE;IRRAT.LISP
    ; No value
    

    一般来说,这些工具是有用的,但是如果你正在寻找一个特定的功能来完成某项任务,谷歌可能会更有用,除非你已经对你要寻找的东西有了一个很好的想法。毕竟,a中的第一个结果是指向
    expt

    页面的链接。了解有关lisp对象的更多信息的标准方法是

    例如:

    * (describe 'expt)
    
    COMMON-LISP:EXPT
      [symbol]
    
    EXPT names a compiled function:
      Lambda-list: (BASE POWER)
      Declared type: (FUNCTION (NUMBER NUMBER) (VALUES NUMBER &OPTIONAL))
      Derived type: (FUNCTION (T T) (VALUES T &OPTIONAL))
      Documentation:
        Return BASE raised to the POWER.
      Known attributes: foldable, flushable, unsafely-flushable, movable, recursive, explicit-check
      Source file: SYS:SRC;CODE;IRRAT.LISP
    

    回答第二个问题:操作包(名称空间),同时从磁盘加载库。我建议您阅读本手册并提出更具体的问题。

    APROPOS
    仅在当前运行的图像中查找包含字符串的符号。它还将指示符号是否具有函数、宏和/或值

    如果您在符号中搜索
    POWER
    ,并且存在这样的符号,则并不意味着存在这样的功能

    CL-USER 1 > (defun foobar (a) a)
    FOOBAR
    
    CL-USER 2 > 'foosym
    FOOSYM
    
    CL-USER 3 > (apropos "foo")
    FOOBAR (defined)
    FOOSYM
    
    因此,检查函数
    FOOBAR
    是有意义的。还有一个符号
    FOOSYM
    ,但它没有函数定义

    一些Lisp实现具有增强版或变体的
    APROPOS
    。例如,LispWorks有一个基于GUI的符号浏览器,其中包含许多搜索选项

    对于SBCL,您最好的选择是将其与GNU Emacs+SLIME一起使用

    要查找函数的文档,基本上有两个直接选项:

    1:调用
    文档

    CL-USER 4 > (defun foobar (a) "my foobar is silly" a)
    FOOBAR
    
    CL-USER 5 > (documentation 'foobar 'function)
    "my foobar is silly"
    
    2:使用IDE命令查找文档。任务:阅读文章

    例如,在LispWorks中,我将使用键盘命令:

    • 文档字符串:符号上的Meta-Control-Shift-a
    • LispWorks文档:符号上的Control-Shift-d
    或者,我也可以使用菜单或上下文菜单来查找文档

    获取有关内置数学功能的概述


    查看常见的Lisp HyperSpec。

    slime中的一些支持:
    C-C-d C-h
    列出与文档相关的函数,例如
    C-C-d h
    在HyperSpec中查找,或
    C-C-d d
    描述
    CL-USER 4 > (defun foobar (a) "my foobar is silly" a)
    FOOBAR
    
    CL-USER 5 > (documentation 'foobar 'function)
    "my foobar is silly"