我有这样的类型:
data Move a t = Emove a a
| Move a t a
我想让它成为一个函子
instance Functor Move where
fmap f (Emove x y) = Emove (f x) (f y)
fmap f (Move x c y) = Move (f x) c (f y)
但是,由于这类类型的错误,这并不能编译。有人能帮我解决这个问题吗?如何向此实例提供t类型?
高级问题:如何在SML中使用带有多个参数的functor?
我看过,,和。它们在structure或functor定义语法方面似乎都有冲突,除了一元functor之外,没有其他任何东西显示。
Specifics:我正试图用标准ML编写一个web服务器(您可以看到努力),并决定将其划分为BUFFER、PARSER和TCPSERVER块。BUFFER和PARSER都是简单易懂的structure。TCPSERVER的思想是处理侦听/接受逻辑,但允许用户通过传递另外两条消息来指定适当的缓冲/解析策略。我得到的东西就像
signature TCPSERVER =
sig
type SockAc
如果我们将对一个类别的理解限制为Haskell中通常的Category类:
class Category c where
id :: c x x
(>>>) :: c x y -> c y z -> c x z
那么,假设一个Arrow是一个Category,它还可以:
class Category c => Arrow c where
(***) :: c x y -> c x' y' -> c (x,x') (y,y')
(&&&) :: c x y -> c x
我能依靠吗
sqrt((float)a)*sqrt((float)a)==a
或
(int)sqrt((float)a)*(int)sqrt((float)a)==a
来检查一个数字是否是一个完美的正方形?为什么或者为什么不?
int a是要判断的数字。我正在使用2005。
编辑:,谢谢你这么快的回答。我发现我不能依赖浮点类型的比较。(如果我如前所述,最后一个a是否会被隐式转换为浮动?)如果我这样做
(int)sqrt((float)a)*(int)sqrt((float)a) - a < e
我应该取多小的e值?
Edit2:嘿,为什么我们不把比较部分放在一边,然后决定(int)是
我必须写一个程序来判断一个数字是否是一个完美的平方。条件是我不使用sqrt函数或指数(**) 我之前用指数(**)向我的老师展示了我的解决方案,她告诉我不要把它包含在那里。 num=int(input("Enter a positive integer: "))
base=1
while num/base!=base:
base=base+1
if (num/base)%1==0:
print(num,"is a square")
else:
print(num,"is not a square") 它可以很好地处理完美