所以我正在学习系统工程,我们目前正在研究不同的编程范例。 上节课我们开始学习函数式编程,我们被要求在 Lisp 中编写一个递归“最小”函数。 这是我交付的:
(DEFUN minimum (l)
(cond
((null l) nil)
((null (REST l)) (FIRST l))
((< (FIRST l) (minimum (REST l)) (FIRST l)))
(t (minimum (REST l)))
)
)
在所有错误中,教授纠正的一件事是基本情况
((null l) nil)
,因为“空列表不在函数的范围内”,但这种解释对我来说还不够,因为其他所有解释都不够我们经历过的类似功能包括这个基本案例。
空列表应该是函数域的一部分吗?
评论已经为您提供了大部分答案,但可能值得进一步扩展。教授的评论让我觉得更具数学动机,而不是与特定的实现有关。
您无法在空列表中找到最小值值。例如,如果您想找到最小实数,则如果列表为空,则无法返回值。 minimim 的数学定义根本没有为空序列定义,就像除以零没有为除法运算定义一样。
当数学家谈论函数的域时,他们谈论的是定义该函数的值的集合。再次,考虑除法,分母的域都是实数除了零。同样,最小值的域是所有值序列,除了空列表。