lisp中一个名为xtoy的函数,它返回从x到y的列表

lisp中一个名为xtoy的函数,它返回从x到y的列表,lisp,common-lisp,practical-common-lisp,ansi-common-lisp,Lisp,Common Lisp,Practical Common Lisp,Ansi Common Lisp,我对lisp很陌生。我试图编写一个名为x2y的函数,它接受两个参数x和y,这两个参数都是整数,并返回一个从x开始到y结束的整数列表 (defun xtoy (X Y) (cond ((> X Y) (list nil)) ((= X Y) (list Y))) (T (append (list X) x2y(+ 1 X) Y))))) 在elisp中,您正在查找C-hf数字序列。RET.您在问题中给出的代码处于非常混乱的状态。 Emacs可以为您突出显

我对lisp很陌生。我试图编写一个名为x2y的函数,它接受两个参数x和y,这两个参数都是整数,并返回一个从x开始到y结束的整数列表

(defun xtoy (X Y)
  (cond ((> X Y) (list nil))
        ((= X Y) (list Y)))
        (T (append (list X) x2y(+ 1 X) Y)))))

在elisp中,您正在查找C-hf
数字序列。
RET.

您在问题中给出的代码处于非常混乱的状态。 Emacs可以为您突出显示Paren。 这足以让我在不进行任何调试的情况下修复您的代码:

(defun xtoy (X Y)
  (cond ((> X Y) (list nil))
        ((= X Y) (list Y))
        (t (append (list X) (xtoy (+ 1 X) Y)))))
以下是打开高亮显示的方式:

(setq show-paren-mode t)

*scratch*
ielm
中进行大部分编辑-它们使事情变得更简单。

如果您需要有关功能的帮助,我建议您使用
cons
而不是
list
,并使用累加器从头到尾进行编辑

(defun xtoy (from to &optional acc)
  (if (> from to)
      acc
      (xtoy from (- to 1) (cons to acc))))

从abo abo的版本开始,您可以简化很多:

1) 去掉(=xy)并在(>xy)中将(列出nil)替换为nil

2) 将
cond
简化为
if
语句

(defun xtoy (X Y)
  (if (<= X Y)
    (append (list X) (xtoy (+ 1 X) Y))
    nil))
4) 使用
cons
而不是
append

(defun xtoy (X Y)
  (if (<= X Y)
    (cons X (xtoy (+ 1 X) Y))))
(defun xtoy(X Y)

(如果(问题是什么?代码不起作用,我将其与问题一起粘贴,但问题已解决。)now@shunya:请注意,elisp和common lisp是lisp家族中的两种不同语言。如果您要问问题,请用问题所在的语言标记。@Baggers抱歉,我刚开始学习lisp,我不是awa我们知道elisp是一种不同于普通lisp的语言。我删除了elisp的标记now@shunya:别担心!现在再次阅读我的评论似乎有点严厉,对此表示抱歉。不,OP只是对调用语法有点混淆,它是
(xtoy(1+x))
而不是
x2y(1+x)
。我在这里看到的问题中经常会出现这种混淆现象。@ChrisJester Young,问题代码中还有两个额外的结束语。啊,我看到这个问题上有一个elisp和公共lisp标记,blimey
(defun xtoy (X Y)
  (if (<= X Y)
    (append (list X) (xtoy (+ 1 X) Y))))
(defun xtoy (X Y)
  (if (<= X Y)
    (cons X (xtoy (+ 1 X) Y))))