Return 来自函数的列表

Return list from a function

我是 LISP 的新手,想知道如何 return 从函数中生成列表。
我需要编写一个将列表作为输入并输出列表的函数。

如果第一个和最后一个元素是偶数:
return 一个包含第一个 ** 2 和最后一个 ** 4 的列表
否则
return 包含第一个和最后一个元素的列表

如何 return 正确列出列表?

(defun test (elements)
    (if (and (numberp (nth 0 elements))
            (numberp (last elements)))
        (if (and (evenp (nth 0 elements))
            (evenp (last elements)))
            (return from test (list (expt (last elements) 2) (expt (nth 0 elements) 4)))
        )
    )
    (return from test (list (nth 0 elements) (last elements)))
)
    

示例:

(cond ((foo-p n) (list 1 2))  ; returns the list
      ((bar-p m) (list 3 4))  ; returns the list
      (t         (list 5 6))) ; returns the list

(if (foo-p n)
    (list 1 2)                ; returns the list
    (if (bar-p m)
        (list 3 4)            ; returns the list
        (list 5 6)))          ; returns the list

列表是一对链。例如。 (1 2 3) 是用 (cons 1 (cons 2 (cons 3 '()))) 创建的。如果你心里明白这一点,那么做列表处理就会容易得多。

由于列表的结构,列表从头到尾创建并从头到尾迭代。

例如。替换第一个元素很容易。您 (cons (do-something (car elements)) (cdr elements)) 并且您有一个第一个元素已更改的列表。你可以用 (reverse elements) 做同样的事情来改变最后一个元素,然后再反转它。把这两个放在一起,你就有了解决办法。

不需要return。例如。如果正文如果函数如下如果 some-expr 为真则参数将在开头获得一个新元素,如果不是则参数。

(if some-expr
    (cons 3 elements)
    elements)

lisp 的每个部分都是这样工作的。可以将表达式视为计算返回值。例如。 some-expr returns 由 if 评估的值。例如。这不是您要退出的函数范围,而是表达式的每个级别。