函数式编程中“最小”函数的域应该是什么?

问题描述 投票:0回答:1

所以我正在学习系统工程,我们目前正在研究不同的编程范例。 上节课我们开始学习函数式编程,我们被要求在 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)
,因为“空列表不在函数的范围内”,但这种解释对我来说还不够,因为其他所有解释都不够我们经历过的类似功能包括这个基本案例。

空列表应该是函数域的一部分吗?

functional-programming lisp
1个回答
0
投票
Naïm Favier 的

评论已经为您提供了大部分答案,但可能值得进一步扩展。教授的评论让我觉得更具数学动机,而不是与特定的实现有关。

您无法在空列表中找到

最小值值。例如,如果您想找到最小实数,则如果列表为空,则无法返回值。 minimim 的数学定义根本没有为空序列定义,就像除以零没有为除法运算定义一样。

当数学家谈论函数的

时,他们谈论的是定义该函数的值的集合。再次,考虑除法,分母的域都是实数除了零。同样,最小值的域是所有值序列,除了空列表。

© www.soinside.com 2019 - 2024. All rights reserved.