微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从函数返回列表

如何解决从函数返回列表

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

如果第一个和最后一个元素是偶数:
返回前** 2和后** 4的列表
其他
返回包含第一个和最后一个元素的列表

如何正确返回列表?

(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返回一个由if求值的值。例如。这不是您要退出的功能范围,而是表达式的每个级别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。