本文介绍了Lisp关联列表错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我编写了将cons单元插入关联列表的代码. 例如,有关联列表
I write the code that insert cons cell into association list. For example, there is association list
((1 . a) (3 . c) (4 . d))我想插入cons单元格(2 . b),然后该程序生成
and I want to insert cons cell (2 . b) then this program produces
((1 a) (2 . b) (3 . c) (4 . d))但是我的代码引发了异常
but my code raises an exception
(car L) should be a lambda expression下面是我的代码
(defun INSERTCELL (R L) (cond ((< (car L) (car R)) cons((car L) INSERTCELL(R (cdr L)))) (t cons(R L))))R是(2 . b),L是((1 . a) (3 . c) (4 . d)),因此应将R插入L.
R is (2 . b), and L is ((1 . a) (3 . c) (4 . d)) so R should be inserted into L.
推荐答案Lisp中的函数调用是缺点单元格:
Function calls in Lisp are cons cells:
(cons 1 2) ==> (1 . 2)如果您修改了代码,则
(defun insertcell (R L) (cond ((< (caar L) (car R)) (cons (car L) (insertcell R (cdr L)))) (t (cons R L))))有效:
(insertcell '(2 . b) '((1 . a) (3 . c) (4 . d))) ==> ((1 . A) (2 . B) (3 . C) (4 . D))请注意,您还需要执行(caar L),而不是(car L),因为L是一个列表,因此要访问第一个密钥,您需要调用两次car.
Note that you also need to do (caar L), not (car L) because L is an alist, so to access the first key you need to call car twice.
更多推荐
Lisp关联列表错误
发布评论