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
评估的值。例如。这不是您要退出的函数范围,而是表达式的每个级别。
我是 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
评估的值。例如。这不是您要退出的函数范围,而是表达式的每个级别。