gpt4 book ai didi

lisp - 如何在 COND 中不返回任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:06 25 4
gpt4 key购买 nike

所以我在 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

最佳答案

您可以删除 mapcar 结果中的 nil,例如:

(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)))

或者您可以使用循环:

(defun lista-dos-aprovados (turma)
(loop for aluno in turma
when (> (media-notas (notas aluno)) 9.5)
collect (list (first aluno) (second aluno))))

关于lisp - 如何在 COND 中不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com