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