循环的方向foldl和foldr方向之间的区别是什么?我认为他们所做的不同,而不只是方向?
我找到了和在互联网上的定义,但我找不到和的实际实现.我确实在我的计算机上搜索了某种前奏的haskell文件,但它没有返回任何可以在文本编辑器中打开的内容.
我已经开始这是一个新问题,因为它成为我上一个问题的后续问题.
如果我有两个由类似构造函数组成的数据类型:
data A = X | Y | Z
data B = X | Y
Run Code Online (Sandbox Code Playgroud)
有没有办法我可以用这种方式表示:
data A = C | Z
data B = C
data C = X | Y
Run Code Online (Sandbox Code Playgroud)
如果你能看到我在做什么 - 我正在尝试将X |分组 Y为一种数据类型,然后可由多种其他数据类型使用.我似乎无法让编译器允许这个,或者如果它,我不能模式匹配X或Y,只有C ??
我收到多次声明C的错误消息.
我以为我可以使用类型,但它们不允许多种类型.
编辑
即使我声明了很长的路(如下所示),它仍然无法编译,并且说X和Y有多个声明:
data A = X | Y | Z
data B = X | Y
Run Code Online (Sandbox Code Playgroud) 我在一个进程中创建ETS表,我想在另一个进程中使用它.我如何在第二个过程中"打开"ETS表?无法在手册页中找到好的功能.
负载均衡器必须知道所有节点.客户端将与负载均衡器连接,然后负载均衡器将每个任务分配给节点.
如果客户端总是访问相同(单个)负载均衡器,怎么会没有单点故障?您不能拥有两个负载均衡器,否则客户端将如何知道要连接哪个负载均衡器?
是否接受了对于某些设计部分,您无法避免单点故障?
我的代码如下:
PID = spawn_link(DistrNode, ......
io:format("~p debug1 ~n",[PID]),
io:format("~p debug2 ~n",[pid_to_list(PID)]),
Run Code Online (Sandbox Code Playgroud)
我觉得:
<10062.97.0> debug1
"<9453.97.0>"debug2
我想把PID作为字符串抓取但不像上面那样改变值 - 这里发生了什么?我看起来将pid转换为原子,但没有功能.
我想得到"<10062.97.0>"
编辑它spawn_link()不是spawn()这有什么不同?
如果我有:
data Container a = Node a | End a | Container a
Run Code Online (Sandbox Code Playgroud)
如果我想编写一个可以查看Container的元素列表并执行列表差异的函数,我该怎么做才能明确告诉编译器这个抽象数据类型允许相等?
我以为会是:
compare::Eq (Container a) => Container a -> Container a -> Bool
compare a b
| a == b = True
| a /= b = False
Run Code Online (Sandbox Code Playgroud)
但它抱怨Eq声明不正确,因为它无法推断(Eq(容器a))因使用'=='而产生
编辑似乎在我的抽象数据类型中导出(Eq)是允许这种情况的唯一方法.有人可以确认一下吗?
包含导出(Eq)后的EDIT2:
test:: [Container a] -> Container a -> Bool
test list element = elem element list
Run Code Online (Sandbox Code Playgroud)
"没有(Eq a)的实例"
我目前正在编写自己的结构,可以同时处理整数和字符串:
就像是
data Collection = One Int | Two String | Three(Collection)(Collection)
Run Code Online (Sandbox Code Playgroud)
但是,我试图编写一个可以将我的结构转换为列表的函数.
我认为这是不可能的,因为默认情况下这样做:
并[1,2, "测试"]
在控制台中不起作用,因此我的功能必然总是失败?
我有这样的数据类型:
data MyType a b = Something a b | .....
Run Code Online (Sandbox Code Playgroud)
然后我有一个类型:
type SomethingElse = MyType a b -> AnotherThing
Run Code Online (Sandbox Code Playgroud)
但是,如果我为它所抱怨的类型定义包含a和b参数,但如果我将它们遗漏,它也会抱怨.
错误消息(在类型定义中)是变量a和b不在范围内.
我有一个包含抽象数据类型作为参数的函数.为了让我能够将我使用的这种抽象数据类型等同起来:
myfunction:: Eq x=> [x]->[x]->[x]
Run Code Online (Sandbox Code Playgroud)
所以它需要两个x列表,并输出一个[x]列表
但是,当我从另一个函数调用它时:
anotherfunction::[x] -> [x] -> [x]
anotherfunction a b = myfunction a b
Run Code Online (Sandbox Code Playgroud)
它说
在myfunction ab表达式中,没有因使用myfunction而产生的(Eq x)实例
但是,如果我从控制台调用myfunction,使用两个参数就可以了.
我该如何解决这个问题?