【发布时间】:2016-01-19 18:08:53
【问题描述】:
我有一个问题,我被要求提供一个函数,该函数将给定变量x 中的所有元素相加。例如,sum([5,5,5]) 应该返回 15。
当我像这样测试单个整数的总和时,我的麻烦就来了:sum(5)
该函数应该能够在单个数字和数字列表之间返回和第四个。我知道要做到这一点,我需要一个具有一些 Int of int | Null | ...
我的问题是如何使下面的代码适用于测试用例sum(5);
fun sum(x) = if x = nil
then 0
else hd(x) + sum(tl(x))
val result = sum([5,5]);
我想我需要类似的东西:
else if (int? x) then x
else hd(x) + sum(tl(x))
但是当我使用我的数据类型执行此操作时,我会遇到 int 与 int 列表的冲突。
【问题讨论】:
-
使用您建议的数据类型,测试用例将类似于
sum (Int 5)或sum Null,而不是sum [5,5,5]。请详细说明该功能应该做什么。 -
嗯,这里的目标是将 LISP 函数转换为 ML。 lisp 函数不仅适用于列表,还适用于由 (is number?) 检查的单个原子数值。显然,在这里引用另一个响应,这在标准 ML 中是不可能的。引用单个 int 和列表。 sum([5,5,5]) 已经按原样工作了。需要 sum(5) 来返回 5 是我的问题。