【发布时间】:2018-12-10 23:51:06
【问题描述】:
我想定义一个函数f [Int] -> Int,其中f 等于列表中元素的总和,如果列表的长度是一个完美的正方形,否则是未定义的。在 Haskell 中执行此操作的惯用方式是什么?
在命令式语言中,我会在assert sqrt(len(xs)) is integer 的效果上添加一行,以便为未定义的情况生成异常。
在像 Haskell 这样的强类型函数式语言中,您希望在类型系统中构建未定义的条件,但是这里不能这样做,因为没有“长度完美平方列表”类型。
我宁愿让程序在未定义的情况下因错误而停止,而不是让函数返回Nothing。
【问题讨论】:
-
还要小心你如何进行实际测试。进行某种按位测试(例如 popcount n == 1 或其他东西)可能是最快且最明显正确的......我想谷歌它
标签: haskell functional-programming