List 从循环中断到If语句LISP
我目前正在用LISP编写一个小程序,它将接受一个列表,并将其拆分为以下内容:List 从循环中断到If语句LISP,list,loops,if-statement,lisp,common-lisp,List,Loops,If Statement,Lisp,Common Lisp,我目前正在用LISP编写一个小程序,它将接受一个列表,并将其拆分为以下内容: (split '(1 2 3) returns-> ((1 2) (3)) 我觉得我非常接近,并且已经编写了它的基本逻辑,我的问题是如果if语句的计算结果为T,我必须执行2-3个操作。因此,我一直收到错误 错误、警告: ***-系统::%EXPAND-FORM:(推送(车辆LST)(CDR(最后一个新的LST))应为 lambda表达式 当if语句的计算结果为true时,我需要将当前列表的头部添加到列表变量n
(split '(1 2 3) returns-> ((1 2) (3))
我觉得我非常接近,并且已经编写了它的基本逻辑,我的问题是如果if语句的计算结果为T,我必须执行2-3个操作。因此,我一直收到错误
错误、警告:
***-系统::%EXPAND-FORM:(推送(车辆LST)(CDR(最后一个新的LST))应为
lambda表达式
当if语句的计算结果为true时,我需要将当前列表的头部添加到列表变量newLst的末尾,然后我需要获取当前列表的尾部,并将另一个列表变量new2Lst的值设置为该值。完成此操作后,我需要跳出循环并将两个列表相互附加。这可能没有多大意义,对不起,希望代码更有意义,请在下面找到它。提前谢谢大家的帮助,我真的很感激每一点
(defun split (lst)
(cond ((= (list-length lst) 1) lst)
(t (setq w (list-length lst))
(setq newLst (list (car lst)))
(setq new2Lst '())
(loop for x from 1 to (+ w 1) do
(if (= x (ceiling (/ w 2)))
( (push (car lst) (cdr( last newLst))) (setq new2Lst (cdr lst)) (return))
(push (car lst) (cdr( last newLst)))
)
(setq lst (cdr lst))
)
(append (list newLst) (list new2Lst))
)
)
)
当您想要计算表达式序列a
、b
、c
时,需要将它们放入(progn a b c)
表单中。但在这里,您将它们包装在一个表单列表中:当您在正常的求值上下文中求值时,(abc)
,即不是在宏、特殊表单中,a
应该是一个使用参数b
和c
调用的函数。
这就是为什么会出现特定错误:(push…
实际上不是函数名或lambda表达式
未定义变量
您正在对未绑定到已知变量(至少在函数中)的符号调用setq
。大多数实现将赋值视为符号的符号值
的赋值,即使行为未指定。您应该通过使用let
绑定在函数中声明它们:
(let ((w (length list))
(... ...))
...)
顺便说一下,在这个函数中,您可以计算两次列表的长度,长度只能计算一次,事实上,您只需要知道列表的cdr中是否有一个元素而没有列表:这是一个固定时间计算,而不像list length
需要遍历整个列表
变量名,大小写
请注意如何命名变量,请使用连字符分隔的单词,而不是混合使用大小写,以遵守Lisp惯例
当您想要计算表达式序列a
、b
、c
时,需要将它们放入(progn a b c)
表单中。但在这里,您将它们包装在一个表单列表中:当您在正常的求值上下文中求值时,(abc)
,即不是在宏、特殊表单中,a
应该是一个使用参数b
和c
调用的函数。
这就是为什么会出现特定错误:(push…
实际上不是函数名或lambda表达式
未定义变量
您正在对未绑定到已知变量(至少在函数中)的符号调用setq
。大多数实现将赋值视为符号的符号值
的赋值,即使行为未指定。您应该通过使用let
绑定在函数中声明它们:
(let ((w (length list))
(... ...))
...)
顺便说一下,在这个函数中,您可以计算两次列表的长度,长度只能计算一次,事实上,您只需要知道列表的cdr中是否有一个元素而没有列表:这是一个固定时间计算,而不像list length
需要遍历整个列表
变量名,大小写
注意如何命名变量,请使用连字符分隔的单词,而不是混合使用大写和小写。变量w、newlst和new2lst是未定义的。您需要定义它们。变量w、newlst和new2lst未定义。你需要定义它们。