所以我在lisp中创建了这个函数,并且在cond
部分基本上如果满足条件,我返回一个包含2个值的列表,如果条件不满足,我想不什么都归还!这是:
(defun lista-dos-aprovados (turma)
(mapcar (lambda (aluno)
(cond ((> (media-notas (notas aluno)) 9.5)
(list (first aluno) (second aluno)))
(t nil)))
turma))
名字是葡萄牙语,但我认为这并不重要。我想做的是当代码到达(t nil)
部分时,我不希望它在我的列表中写NIL
。我尝试没有T
条件或在T
之后将其留空,仍然始终写NIL
。
答案 0 :(得分:3)
您可以删除nil
结果中的mapcar
,例如:
(defun lista-dos-aprovados (turma)
(remove nil
(mapcar (lambda (aluno)
(cond ((> (media-notas (notas aluno)) 9.5)
(list (first aluno) (second aluno)))
(t nil)))
turma)))
并注意您可以将功能简化为:
(defun lista-dos-aprovados (turma)
(remove nil
(mapcar (lambda (aluno)
(when (> (media-notas (notas aluno)) 9.5)
(list (first aluno) (second aluno))))
turma)))
或者您可以使用loop
:
(defun lista-dos-aprovados (turma)
(loop for aluno in turma
when (> (media-notas (notas aluno)) 9.5)
collect (list (first aluno) (second aluno))))