gpt4 book ai didi

lisp - 如何解决 lisp 中格式错误的 lambda?

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:20 24 4
gpt4 key购买 nike

我正在尝试用 lisp 检查一个列表是否有山脉方面。例如:1,5,9,6,4,3

l 是我的列表,aux 是 0(l 的上升部分)或 1(列表的下降部分)。muntemain 只是调用 munte 从 aux=0 开始,升序部分

我的错误是:

 Badly formed lambda: (AND (< (CAR L) (CAR (CDR L))) (EQ AUX 0))

我看不出问题所在。有人可以帮忙吗?

(defun munte (l aux)
(cond
((and (atom l) (null aux)) NIL)
((and (null l) (null aux)) NIL)
((and (atom l) (eq aux 1)) T)
((and (null l) (eq aux 1) T)
((and (< (car l) (car(cdr l))) (eq aux 0)) (munte(cdr l) 0))
((and (or (> (car l) (cadr l)) (= (car l) (cadr l))) (eq aux 0))(munte(cdr l) 1))
( and (> (car l) (cadr l)) (eq aux 1)) (munte(cdr l) 1))
(T NIL)
)
)

(defun muntemain (l)
(cond
((> (car l) (cadr l)) NIL)
((< (length l) 2) NIL)
(T (munte l 0))
)
)

最佳答案

格式化

作为noted by Barmar ,您确实需要使用编辑器来帮助您处理括号。安装Emacs+Slime的教程有很多。花一些时间安装适当的工具。

不要使用EQ用于数字和字符

An implementation is permitted to make "copies" of characters and numbers at any time. The effect is that Common Lisp makes no guarantee that eq is true even when both its arguments are "the same thing" if that thing is a character or number.

分解测试

    ((and (atom l) (null aux)) NIL)
((and (null l) (null aux)) NIL)
((and (atom l) (eq aux 1)) T)
((and (null l) (eq aux 1) T)

来自atom的定义, NIL 是一个原子,所以你不需要 (null L)aux 的不同情况也可以分组。以下条款足以说明上述所有内容:

    ((atom L) (eql aux 1))

但我不明白为什么 aux 如果你总是将它绑定(bind)到 0 或 1,那么一开始它就不是 bool 值。只需使用 t nil 并在上述子句中返回 aux

使用有意义的函数

(< (car l) (car(cdr l)))

当然,(car(cdr ..)) 被称为(cadr ..),但也被称为second。上面的测试等同于:

(< (first L) (second L))

如果您的列表没有第二个元素怎么办?您将比较一个数字与 nil 并发出错误信号(不是您想要的)。你需要更多的测试。在 muntemain 中,你似乎有一个长度小于 2 的特殊情况,但只有当前一个返回 nil 时才会进行测试,如果一个发出错误信号。

迭代替代

这里有一个完全不同的方法来解决这个问题,只是给你一些想法。

(lambda (list)
(loop
;; memories
for px = nil then x
for pdx = nil then dx

;; current element
for x in list

;; first and second "derivatives" (signs only)
for dx = 1 then (signum (- x px))
for ddx = 0 then (signum (- dx pdx))

;; checks
sum ddx into total
always (and (<= dx 0) (<= -1 total 0))
finally (return (= total -1))))

关于lisp - 如何解决 lisp 中格式错误的 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com