haskell - 确定总的终止函数
问题描述
我正在尝试确定是否为以下类型:((a -> c) -> c) -> a
可以使用该类型作为函数签名来编写一个总的终止函数?我知道,为了使一个函数完整,必须为其输入的所有可能值定义它。但是,我不确定函数终止究竟意味着什么。对于要终止的函数,它是否必须返回一个值(例如,而不是进入无限循环)?
此外,我可以使用哪些方法来证明可以使用 来编写总的终止函数((a -> c) -> c) -> a
?任何见解都值得赞赏。
解决方案
对于要终止的函数,它是否必须返回一个值(例如,而不是进入无限循环)?
是的,就是这个意思。具体来说,这意味着您不应该通过给出如下定义来作弊
uncont :: ((a -> c) -> c) -> a
uncont f = uncont f
...or uncont = uncont
, or uncont = undefined
,所有这些都意味着您正在生成一个实际上无法评估为有意义结果的底部值。
一般来说,为了证明某种类型的功能可以实现......只需实现它!...如果可以,那就是...(剧透警告)在这种情况下你不能!为了证明这一点,您需要找到一个特定的类型实例化,您可以通过调用该函数生成一个不可能的结果。通常可以通过使用 type 实例化 result-type-variable 来找到这样的结果,Void
然后证明您仍然可以为函数生成参数,这会导致矛盾,因为函数(假设它是全部并终止)会产生一个 type 的值Void
,这是不可能的。
推荐阅读
- react-redux - 他们是一种重置 Twilio 设备处理程序函数的方法吗?
- terraform - Terraform 没有为所有实例分配公共 IP
- javascript - 根据日期加设置背景颜色
- java - Java:如何通知对象?(哪些模式/...)
- javascript - 如何按顺序处理数组异步函数
- sql - 不能在 sqlite 中使用 BETWEEN 或两个以上的比较运算符
- asp.net-core - 将 ASP.NET Core 2.2 移植到 3.0 后,请求 DateTime 未正确反序列化并抛出错误
- c - 无法理解 getop 函数中的最后两个 while 循环
- javascript - 修改 javascript 以维护 Flask 中的 HTML 下拉菜单选择
- mysql - 检查日期是否介于 MySQL 数据库中的两个日期之间?