Hello World

以下是來自 Common Lisp 的 REPL 會話的摘錄,其中包含 Hello World! 定義並執行函式。有關 REPL 的更全面說明,請參閱本頁底部的備註。

CL-USER> (defun hello ()
           (format t "Hello, World!~%"))
HELLO
CL-USER> (hello)
Hello, World!
NIL
CL-USER> 

這定義了名為 hello 的零引數的函式,它將字串 Hello, World! 寫入後跟新行到標準輸出,並返回 NIL

定義我們編寫的函式

(defun name (parameters...)
  code...)

在這種情況下,該函式稱為 hello,不帶引數,它執行的程式碼是進行一次函式呼叫。來自 lisp 函式的返回值是要執行的函式中的最後一位程式碼,因此 hello 返回 (format t "Hello, World!~%") 返回的任何內容。

在 lisp 中呼叫函式,可以寫入 (function-name arguments...),其中 function-name 是函式的名稱,arguments... 是呼叫的引數列表(以空格分隔)。有一些特殊情況看起來像函式呼叫但不是,例如,在上面的程式碼中沒有被呼叫的 defun 函式,它被特殊處理並定義了一個函式。

在 REPL 的第二個提示符下,在我們定義了 hello 函式之後,我們通過編寫 (hello) 來呼叫它而沒有引數。這又將使用引數 tHello, World!~% 呼叫 format 函式。format 函式根據給出的引數生成格式化輸出(有點像 C 中 printf 的高階版本)。第一個引數告訴它輸出到哪裡,t 表示標準輸出。第二個引數告訴它要列印什麼(以及如何解釋任何額外的引數)。指令(第二個引數中的特殊程式碼)~%告訴格式列印換行符(即在 UNIX 上它可能會寫入\n 並在 windows \r\n 上)。格式通常返回 NIL(有點像 NULL 在其他語言中)。

在第二個提示後,我們看到 Hello, World 已被列印,在下一行,返回值為 NIL