我有一个清单
L=(1 j 3 k 4 h 5 n 6 w)
我需要做一个函数验证,它将验证第一个原子是否在第二个原子之前。我想验证这一点:
> Verify(3 k)
结果应该返回
> T
// 因为原子'3'在原子'k'之前
在这种情况下:
>Verify(h 4)
结果应该返回
> NIL
// 因为原子'h'在原子'4'之后
我必须检查每个元素的位置并比较位置
你用的是什么 Lisp 方言?以下是有关如何得出解决方案的一些提示,请填空:
(define (verify lst a b)
; what happens if there's only one element left in the list?
(cond ((null? (cdr lst)) <???>)
; how do we check if the current element is equal to the `a` parameter
; and the next element is equal to the `b` parameter?
(<???> T)
; how do we continue traversing the rest of the list?
(else (verify <???> a b))))
;;; tests
(define lst '(1 j 3 k 4 h 5 n 6 w))
(verify lst 3 'k)
> T
(verify lst 'h '4)
> F
这是 Common Lisp 中的单行代码:
(defun verify (list a b)
(member b (member a list)))
请注意,它不返回 T 或 NIL,而是一个“广义布尔值”(除nil
true 之外的任何值)。这是 Lisp 中的一个基本概念:
http://clhs.lisp.se/Body/26_glo_g.htm#generalized_boolean
这也假设“之前”意味着“之前的任何地方”。你的作业问题看起来可能是关于“就在之前”。它应该很容易修改。