【发布时间】:2019-08-09 19:02:50
【问题描述】:
我正在尝试确定是否为以下类型:((a -> c) -> c) -> a 总,终止函数可以使用该类型作为函数签名来编写吗?我知道,为了使一个函数完整,必须为其输入的所有可能值定义它。但是,我不确定函数终止究竟意味着什么。对于要终止的函数,它是否必须返回一个值(例如,不进入无限循环)?
此外,我可以使用哪些方法来证明可以使用((a -> c) -> c) -> a 编写一个总的终止函数?任何见解都值得赞赏。
【问题讨论】:
-
一种方法,它可能不是你想要的,但它是我会做的,是给出一个满足它的函数的例子。在这种情况下,我有一种感觉,只有一个这样的函数存在(当然可以用几种不同的方式编写,但可能只有一种行为可以满足它)。这是学校作业吗?
-
不,这只是一个家庭作业问题。但我不确定该怎么做,所以我正在寻找一些指导。
-
这是一个函数,它接受一个延续,然后通过返回延续结束的初始值来忽略它。
-
实际上我开始相信这种类型签名没有完全的终止功能。但我不知道我将如何证明这一点,除非有一些非正式的漫谈。如果我给你我的非正式漫谈,我可能会毁了你的任务
-
...然而,它实际上只有当
c类型是无约束多态时才等效,这里的参数实际上并非如此——如果类型是(∀ c . (a -> c) -> c) -> a,这与您给出的不同(并且有可能的实现)。
标签: haskell functional-programming