【发布时间】:2016-02-03 17:27:47
【问题描述】:
我写了以下代码:
fun remove_element(nil, elem) = raise Empty
| remove_element(hd::tl, elem) = if(hd=elem) then tl else hd::remove_element(tl, elem);
但该函数(从列表中删除元素 elem)适用于 int。我需要让它适用于实数,但我做不到。我尝试了很多重写函数的方法,也使用了 :real ,但这些给我带来了错误。
有什么建议吗?
谢谢
【问题讨论】:
-
您的函数(在 int 的情况下)只会从列表中删除
elem的第一次出现——这是设计使然吗?此外——如果elem不在列表中,即使列表本身可能不为空,您的函数也会引发Empty。也许你应该提出一个自定义错误。最后——除非这是家庭作业,否则使用库函数List.filter更有意义。 -
比较第一个,如果它与 elem 相同,则删除列表的第一个元素。这就是为什么 else 子句是 hd::remove_element(tl, elem) 所以列表的其他元素不会消失。
-
我理解您定义的逻辑,但不确定是否仅删除第一次出现的
elem是功能还是错误。对我来说,将[2,1,3,4]称为从[2,3,1,3,4]中删除 3 的结果似乎很奇怪,但这就是remove_element([2,3,1,3,4], 3);返回的结果。 -
@JohnColeman 是的,我知道,但我不认为我可以使用 List.filter 原因正如你所说,这是一项家庭作业,我无法集成功能。