Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Lisp函数中定义语法错误_Lisp - Fatal编程技术网

在Lisp函数中定义语法错误

在Lisp函数中定义语法错误,lisp,Lisp,我口齿不清。请帮助我查找语法错误。我需要写一个函数来交换列表中的两个元素。此函数必须由循环周期组成。这里是到目前为止我们所做的事情 (defun swap-two-element(z x y) (let ((newlist nil) (newlist2 nil) (copyz z) (copyz2 z) (newx nil)) (loop (when (= (- (length z) (length copyz2)) y) (return (set new

我口齿不清。请帮助我查找语法错误。我需要写一个函数来交换列表中的两个元素。此函数必须由循环周期组成。这里是到目前为止我们所做的事情

(defun swap-two-element(z x y)
  (let ((newlist nil) (newlist2 nil) (copyz z) (copyz2 z) (newx nil))
    (loop
      (when (= (- (length z) (length copyz2)) y)
        (return (set newx car z)))
      (setq newlist2 (append newlist2(car copyz2))
            copyz2 (cdr copyz2)))))
调用示例:
(交换两个元素(a b c d)2 3)

用单词替换单词,您就可以开始了


另外,您需要解决警告问题,并解释函数应该做什么,以便我们可以帮助您处理算法。

您确实需要整理您的问题。标题什么也没说,代码格式不好,你真的需要开始了。我不会给你你的解决方案,因为你需要通过尝试来学习。这是一个你可以用来做作业的例子

;;这将按其奇数索引对列表进行排序
;; 注意:索引从零开始,所以第一个元素是偶数
(定义顺序奇数索引(列表)
(循环:for元素:在列表中;迭代列表)
:对于索引:从0开始;从0开始并继续
:if(oddp索引);如果在循环中
:collect元素:进入奇数列表;自动创建变量
:else;循环中的else
:将元素:收集到偶数列表中
:finally(return(追加奇偶列表));最后该怎么办
(顺序奇数索引’(4673279));=>(67 2 9 4 3 7)
我使用关键字(如
:for
而不是
for
)来指示哪些符号是循环关键字,哪些不是循环关键字。这是可选的,但我觉得它看起来干净多了


现在您的问题可以通过将元素收集到5个变量中来解决。其中两个是当索引等于要切换的位置之一(作为参数给出)时,其他3个是在前面、中间和更大的位置。在finally中,您可以按照正确的顺序添加这些变量,就完成了

你的错误信息是怎么说的?另外,看看周围的一些lisp示例,并使用一些空格。阅读代码以理解代码会容易得多。;编译器警告:;在SWAP-TWO-ELEMENT中:在调用SET with arguments(NEWX CAR Z)时;提供了3个参数,但最多接受2个;按当前的全局定义设置;在SWAP-TWO-ELEMENT中:未声明的自由变量CAR;在SWAP-TWO-ELEMENT中:未使用的词汇变量COPYZ;在SWAP-TWO-ELEMENT中:未使用的词汇变量NEWLIST;在SWAP-TWO-ELEMENT中:未使用的词法变量XBacktrace:0:(CCL::APPEND-2a-B)1:(SWAP-TWO-ELEMENT(ab-cd)23)2:(CCL::CALL-CHECK-REGS SWAP-TWO-ELEMENT(ab-cd)23)3:(CCL::廉价-EVAL(SWAP-TWO-ELEMENT)(ab-D)23))我自由地格式化了代码,并在
时将
cond
替换为
when
,以符合CL编码标准,并使其他Lisper更容易阅读。@sds您还自由地将
替换为
,从而解决了问题:(错误消息OP posted显示“在调用SET with arguments…”,但由于您留下了代码,它根本不会调用
SET
。事实上,OP在此之后并不“好用”。此代码还有其他问题(如注释中的警告所示(例如,
car
变量未绑定等))。