📜  LISP 中的返回值函数

📅  最后修改于: 2022-05-13 01:55:39.894000             🧑  作者: Mango

LISP 中的返回值函数

在上一篇关于 LISP函数的文章中,我们已经看到了定义函数并通过传递一些参数来调用函数的语法。

从函数返回值:

在 LISP 中,函数体中的最后一个表达式成为该函数的返回值。

示例:让我们创建一个函数,该函数接受一个数字的输入参数并将其值加倍。

Lisp
(defun double-the-number (n)
    ( * n 2)
)
  
; Making function calls : 
(write (double-the-number 5))
(terpri)    ;Linebreak
(write (double-the-number 10))
(terpri)
(write (double-the-number 20))
(terpri)


Lisp
(defun double-the-number (n)
    (if (> n 10)
        (return-from double-the-number (* 2 10)))
    ( * n 2)
)
  
  
;; Calling the function
(write (double-the-number 5))
(terpri)        ;Linebreak
(write (double-the-number 10))
(terpri)
(write (double-the-number 20))
(terpri)


在这个函数体中,我们的最后一个表达式是:

( * n 2)

因此,此函数将在调用时返回此表达式的值

输出 :

10
20
40

但有时我们可能需要中断条件语句或从函数中间返回值,在这种情况下使用RETURN-FROM特殊运算符。

使用 RETURN-FROM 的语法:

(return-from place value)

在这里,位置是我们必须从中返回特定值的代码块,例如,位置是当前函数的名称

示例:在上面的 LISP 代码中,我们设置一个条件,如果数字大于 10,则函数将通过将数字 10 加倍而不是原始数字加倍来返回值

语言

(defun double-the-number (n)
    (if (> n 10)
        (return-from double-the-number (* 2 10)))
    ( * n 2)
)
  
  
;; Calling the function
(write (double-the-number 5))
(terpri)        ;Linebreak
(write (double-the-number 10))
(terpri)
(write (double-the-number 20))
(terpri)

在这里,您可以看到在第三个函数调用中我们传递了值 20,但由于我们的条件,它将使最大值(10)翻倍,因此在return-from运算符的帮助下,我们能够返回立即来自函数的值。

输出 :

10
20
20