Lisp关联列表错误

编程入门 行业动态 更新时间:2024-10-12 03:24:50
本文介绍了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关联列表错误

本文发布于:2023-07-09 21:19:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1088241.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   列表   Lisp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!