Присвоение значения только в том случае, если в схеме выполнены определенные условия
У меня есть список, который может содержать некоторые нулевые значения. Тем не менее, я намерен игнорировать эти нулевые значения. Пример моего списка будет:(() () 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+