使用Lisp查找列表的位置

问题描述 投票:0回答:1

不使用MEMBER,请完成以下递归函数POS的定义,例如如果L是一个列表并且E是L的元素,则(POS E L)返回第一个的位置在L中出现E,但是如果L是一个列表并且E不是L的元素,则(POS E L)返回0。

(DEFUN POS (E L)
  (COND ((ENDP L) ... )
        ((EQUAL E (CAR L)) ... )
        (T (LET ((X (POS E (CDR L))))
                ))))

这是我的代码

(defun pos (E L)   
  (cond ((endp L)  0)                                                                               
        ((equal e (car L))  1)                                                                      
        (T (let ((x   (pos E (cdr L))))                                                         
             (if (zerop x) x                                                                    
               (+ x 1))))) 

我尝试用]测试条件>

(POS '(A B) '((K) (3 R C) A (A B) (K L L) (A B))) => 4

但是它给我答案4并抛出错误***-

读取##>:对象不能以#\开头

我不知道什么是#\

[不使用MEMBER,完成以下递归函数POS的定义,使得如果L是列表,而E是L的元素,那么(POS EL)返回E的首次出现的位置...

syntax-error lisp common-lisp
1个回答
0
投票
(defun pos (el l &optional (acc 1))
  (cond ((null l) 0)
        ((equal el (car l)) acc)
        (t (pos el (cdr l) (1+ acc)))))
© www.soinside.com 2019 - 2024. All rights reserved.