我知道您可以使用以下内容执行简单的消息传递:
self() ! hello.
Run Code Online (Sandbox Code Playgroud)
您可以通过调用查看消息:
冲洗()。
我还可以在函数中创建简单的进程,例如:
spawn(module, function, args).
Run Code Online (Sandbox Code Playgroud)
但是我不清楚如何在不注册 Pid 的情况下向进程发送消息。
我已经看到一些示例,表明您可以在 shell 中对它进行模式匹配以获取分配给 var 的 Pid,因此如果我创建一个 gen_server,例如:
...
start_link() ->
gen_server:start_link(?MODULE, init, []).
init(Pid) ->
{ok, Pid}.
...
Run Code Online (Sandbox Code Playgroud)
然后我可以在 shell 中使用以下命令调用它:
{ok, Pid} = test_sup:start_link().
{ok,<0.143.0>}
> Pid ! test.
test
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,您能否以 <0.0.0> 的形式向 Pids 发送消息,而无需将它们注册到 shell 中的原子或变量?实验和搜索被证明是徒劳的......
如何计算数据类型传递给函数的次数和总值?我是FP的新手,不确定这是否是可变性法律或参考透明度允许的.上下文正在使用堆栈并尝试解决,如果您将一系列指令传递给堆栈,您可以计算出传入特定指令的频率以及所有这些类型的总值,作为一种计数器......我已经四处寻找无济于事并开始认为我的方法可能存在根本性的缺陷,所以任何建议都会受到赞赏,但我想我会把它放在那里,因为我有兴趣知道,我正在努力;
> data Value > = Numeric Int > | Logical Bool > deriving (Eq, Show, Read) ... > data Instruction > = Push Value > | Pop > | Fetch Int > | Store Int ... > step inst c= > case (inst) of > (Push, stack) -> (c', x : stack) > (Pop, _ : stack) -> (c', stack) > where > c = c' + 1 ...
我试图找出是否有可能在Haskell集合理解中模式匹配.我有一个包含元组或嵌套列表和元组的列表列表;
例如
[[(1,("A",1)), (2,("B",1))], [(0,("A",1)), (3,("B",2)), (2,("C",1))]]
Run Code Online (Sandbox Code Playgroud)
我想丢弃包含"A"的元组,并在其他元素上执行任意计算.
我在思考:
pack(xs:xss) = [package x | x <- xs, x /= (1,("A", 1))] : (pack xss)
pack(_) = []
package x = case x of
(i, ("B", j)) -> (i + j, ("B", j * i))
(i, ("C", j)) -> (i * j, ("C", j + i))
(otherwise) -> x
Run Code Online (Sandbox Code Playgroud)
以下可能允许使用通配符:
x /= (1,("A", 1))
Run Code Online (Sandbox Code Playgroud)
如:
x /= (_,("A", _))
Run Code Online (Sandbox Code Playgroud)
值得注意的是,嵌套元组中的数字将始终为int类型,不确定是否有帮助......
我环顾四周但看不出这是否可能,似乎过滤是一个更好的选择,如下所述; 但是我们正在过滤未知数.
我的问题是来自更大的工作/功能的抽象示例,但希望我已经在这里捕获了问题的本质.我愿意接受其他建议.