gpt4 book ai didi

lisp - Lisp "prog"在这个例子中是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:41 26 4
gpt4 key购买 nike

我是 lisp 的初学者,我需要有人向我解释 prog 表单是如何工作的,一步一步。 l1 的初始值是多少?没有?

如果列表在第一层有偶数个元素,问题输出 T,否则输出 nil。

(defun nr_par (l)
(prog ((l1 l))
ciclu
(cond
((null l1) (return T))
((null (cdr l1)) (return NIL))
((null (cddr l1)) (return T))
(T (setf l1 (cddr l1))
(go ciclu)))))

在控制台上:

(nr_par '(1 2 3 4 5 6 7 8))

T

最佳答案

该程序很简单,但不是很地道的 lisp(它是命令式的而不是功能性的)。一步一步进行如下。

prog 使用了一系列变量绑定(bind),在这种情况下,l1 最初被赋予了 l 的值。然后,循环开始的一系列语句(同样,不是很 lisp 惯用语)。

这种类型的循环使用一个标记 (ciclu) 和一个 goto 指令 (go),同样,不推荐,但它是存在的。之后,cond 检查一系列情况。当列表为空 (null) 时,您返回 true,在其他情况下,您检查长度是偶数还是奇数,并返回相应的值。

在列表长于一个或两个元素的情况下(两种情况都不为空),l1 列表被调整为指向它自己的下一个元素的下一个( cddr 函数)。

最后,go 函数将程序返回到 ciclu 标签。

当满足任何 cond 子句时,程序将结束,返回 TNIL

关于lisp - Lisp "prog"在这个例子中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com