Присвоение значения только в том случае, если в схеме выполнены определенные условия

У меня есть список, который может содержать некоторые нулевые значения. Тем не менее, я намерен игнорировать эти нулевые значения. Пример моего списка будет:
(() () MC+ () MD- () () ME+)

В моей процедуре я перебираю эти элементы и использую let, я создаю локальную переменную привязки, которая связывается с одним элементом в этом списке. Тем не менее, я должен быть в состоянии связать переменную, только если значение не является нулевым. В настоящее время я делаю это так:

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

Однако дизъюнкту следует присваивать значение, только если этот элемент не равен нулю. Это означает, что значение, назначенное disjunct, должно быть: MC+

Он должен перебрать все значения и выбрать следующее ненулевое значение и присвоить его disjunct,

Еще одна вещь, я делаю дальнейшие операции на disjunct по линии. И рекурсивно, я передаю оставшуюся часть списка по линии. Поэтому в следующий раз я рекурсивно назову эту процедуру, disjunct должен иметь значение MD-, Что использует (cdr disjunct-list) Я должен быть в состоянии получить следующий список: (() MD- () () ME+)

Как это может быть сделано?

1 ответ

Отфильтруйте входной список с самого начала (до фактической передачи его в рекурсивную процедуру), чтобы вы могли спокойно игнорировать эти надоедливые пустые списки и сосредоточиться только на реальных значениях. Например:

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

(cadr disjuncts)
=> 'MD-

(caddr disjuncts)
=> 'ME+
Другие вопросы по тегам