2017-09-17 66 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