2017-09-17 29 views
2

我最近问了一个question关于sbcl,其中的一个响应提到了我不知道的两个函数:#'sb-ext:string-to-octets#'sb-ext:octets-to-string。除了回答我的问题之外,这也教会了我应该浏览包sb-ext的外部符号以查看还有什么可以使用。我的问题(与sbcl有关)是这样的:除了浏览包sb-ext的外部符号外,还有其他一些描述包sb-ext和其他添加的手册(我试图避免单词“扩展”,因为它是一个特定的技术术语)sbcl?例如,#'sb-ext:string-to-octets#'sb-ext:octets-to-string未在sbcl manual中讨论。sbcl:(例如)#'sb-ext:字符串到字节的其他文档

+2

对于事情是不是在手册中并没有文档字符串,读取源(或感兴趣的东西附近至少留言)通常是最好的选择。 SBCL代码非常清晰,评论很好。对于'STRING-TO-OCTETS',特别是似乎没有太多的文档,可能是因为这个函数很容易理解。 – jkiiski

+0

我使用的一件事是repl-utilities。你可以使用sb-ext-package,然后做一个(摘要)查看所有文档字符串,然后跟进一个M-。在感兴趣的例程上。 –

回答

1

正如@svante在另一个问题中的一个答案所指出的那样,我更喜欢使用另一个用于postabiliyt的库,并且通常记录如babel

正常情况下,如果符号是在ansi通用lisp中检查通用lisp中的文档,您应该检查012hslyslime对此具有卓越的功能。

,通常我进行如下:

CL-USER> (documentation 'sb-ext:octets-to-string 'function) 
NIL 
CL-USER> (describe 'sb-ext:octets-to-string) 
SB-EXT:OCTETS-TO-STRING 
    [symbol] 

OCTETS-TO-STRING names a compiled function: 
    Lambda-list: (VECTOR &KEY (EXTERNAL-FORMAT DEFAULT) (START 0) END) 
    Derived type: (FUNCTION 
       ((VECTOR (UNSIGNED-BYTE 8)) &KEY (:EXTERNAL-FORMAT T) 
        (:START T) (:END T)) 
       *) 
    Source file: SYS:SRC;CODE;OCTETS.LISP 
; No values 

描述功能总是得到你有关的符号相关的信息,那么你可以用狡猾去德源或煤泥与M-.

(defun octets-to-string (vector &key (external-format :default) (start 0) end) 
    (declare (type (vector (unsigned-byte 8)) vector)) 
    (with-array-data ((vector vector) 
        (start start) 
        (end end) 
        :check-fill-pointer t) 
    (declare (type (simple-array (unsigned-byte 8) (*)) vector)) 
    (let ((ef (maybe-defaulted-external-format external-format))) 
     (funcall (ef-octets-to-string-fun ef) vector start end)))) 

,最后你可以去这里阅读测试的知识库去github SBCL回购和寻找这个功能给你的源代码测试,你可以阅读以获得一个简单的使用该功能:

https://github.com/sbcl/sbcl/search?utf8=%E2%9C%93&q=string-to-octets&type=

这样的:

https://github.com/sbcl/sbcl/blob/622c9daf9bb41ef9ad4b8a063c62c4baf59a1c1a/tests/octets.pure.lisp