0

我有一个可能包含一些空值的列表。但是,我打算忽略那些空值。我的清单示例是:
(() () MC+ () MD- () () ME+)

在我的过程中,我遍历这些元素并使用 let 创建一个本地绑定变量,该变量绑定到此列表中的一个元素。但是,只有当值不为空时,我才应该能够绑定变量。目前,我正在这样做:

(let* ([disjunct (car disjunct-list)])

但是,只有当该元素不为空时,才应为 disjunct 分配一个值。这意味着分配给 disjunct 的值应该是:MC+

它应该遍历所有值并选择下一个非空值并将其分配给disjunct.

还有一件事,我正在做进一步disjunct的操作。并且递归地,我将列表的其余部分向下传递。所以下次我递归调用这个过程时,disjunct应该有值MD-。那就是使用(cdr disjunct-list)我应该能够得到以下列表:(() MD- () () ME+)

如何才能做到这一点?

4

1 回答 1

1

从头开始过滤输入列表(在实际将其传递给递归过程之前),这样您就可以放心地忽略那些讨厌的空列表并只关注实际值。例如:

(define disjuncts (filter (lambda (e) (not (null? e)))
                          '(() () MC+ () MD- () () ME+)))
(car disjuncts)
=> 'MC+

(cadr disjuncts)
=> 'MD-

(caddr disjuncts)
=> 'ME+
于 2015-03-08T13:15:23.503 回答