我正在创建一个
形式的函数y(t + h)= y(t)+ h / y(t)
其中y(0)= 1
fun y :: "real ⇒ real" where
"y 0 = Suc(0)"|
"y(t+h) = y(t) + h*(1/y(t))"
不幸的是,我收到了错误
格式错误的定义:顺序模式下不允许使用非构造函数模式。
y 0 =真实(Suc 0)
谷歌搜索告诉我,我不是坚持真实数据类型的一些构造函数模式,但我无法找到模式是什么以及我应该如何更改我的函数。
答案 0 :(得分:0)
实数不是代数数据类型,因此您无法使用fun
对它们进行模式匹配。您必须使用“正常”等式定义或函数包的一些更高级的功能,但这也会使事情变得更加困难,因为您必须自己证明一些明确定义的属性。
此外,右侧的Suc 0
是自然数,而不是实数。 (只需写1
)
然而,你定义的最大问题是你写下来的方式太不正式了。我甚至不会非正式地理解这意味着什么。
h
有哪些假设?t
,第二个等式应该有效吗? t
输入负值时会发生什么? (你写的方式:非终止)0 < t < h
时会发生什么?一旦你对要定义的函数有一个数学上精确的规范,你就可以用function
命令把它写下来而不用太担心