我有一个可能包含一些空值的列表。但是,我打算忽略那些空值。我的清单示例如下:
(() () MC+ () MD- () () ME+)
在我的程序中,我迭代这些元素并使用let我创建一个本地绑定变量,它绑定到此列表中的一个元素。但是,我应该只能在值不为null时绑定变量。目前,我这样做:
(let* ([disjunct (car disjunct-list)])
但是,仅当该元素不为null时才应为其分配值。这意味着分配给disjunct的值应为:MC+
它应迭代所有值并选择下一个非空值并将其分配给disjunct
。
还有一件事,我正在对disjunct
进行进一步的操作。递归地说,我正在通过列表的其余部分。因此,下次我递归调用此过程时,disjunct
应具有值MD-
。这是使用(cdr disjunct-list)
我应该能够获得以下列表:(() MD- () () ME+)
如何做到这一点?
答案 0 :(得分:1)
从头开始(在实际传递给递归过程之前)过滤输入列表,这样您就可以安全地忽略那些讨厌的空列表并仅关注实际值。例如:
(define disjuncts (filter (lambda (e) (not (null? e)))
'(() () MC+ () MD- () () ME+)))
(car disjuncts)
=> 'MC+
(cadr disjuncts)
=> 'MD-
(caddr disjuncts)
=> 'ME+