仅在Scheme中满足某些条件时分配值

时间:2015-03-08 06:34:07

标签: scheme guile

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

在我的程序中,我迭代这些元素并使用let我创建一个本地绑定变量,它绑定到此列表中的一个元素。但是,我应该只能在值不为null时绑定变量。目前,我这样做:

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

但是,仅当该元素不为null时才应为其分配值。这意味着分配给disjunct的值应为:MC+

它应迭代所有值并选择下一个非空值并将其分配给disjunct

还有一件事,我正在对disjunct进行进一步的操作。递归地说,我正在通过列表的其余部分。因此,下次我递归调用此过程时,disjunct应具有值MD-。这是使用(cdr disjunct-list)我应该能够获得以下列表:(() MD- () () ME+)

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

(cadr disjuncts)
=> 'MD-

(caddr disjuncts)
=> 'ME+