我需要C中的双链表,但它必须适用于不同的类型.在C++中,我们使用模板.我在哪里可以找到C中的示例,用于带有抽象类型项的双链表.
谢谢
最近,我开始研究GNU/Emacs.是非常容易使用的程序.研究了它的结构.为我调好色.在C编程中将其配置为类.一切似乎都很正常.但现在问题出现在GNU/Emacs lisp上.如果我没有自己开发Emacs并且只使用它像ide进行C/C++开发,邮件,jabber等,我是否真的应该花时间研究Emacs Lisp ...
事实上,当我编辑我的.emacs时,我理解我写的.但我写的大多是现成的脚本,或者它的内容非常简单.
谢谢.
例如,我有10个文本字符串的txt文件.我怎么能用erlang读取这个文本的前5个字符串?
谢谢.
例如,我有erlang记录:
-record(state, {clients
}).
Run Code Online (Sandbox Code Playgroud)
我可以从客户字段列表中制作吗?
我可以保留在正常列表中的客户端?如何在此列表中添加一些值?
谢谢.
我有代码:
std::string firstFile = boost::filesystem::path(first->name()).leaf();
Run Code Online (Sandbox Code Playgroud)
但得到错误:
error conversion from ‘boost::filesystem3::path’ to non-scalar type ‘std::string
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
谢谢.
我尝试使用erlang nif,
我做了:
#include <erl_nif.h>
Run Code Online (Sandbox Code Playgroud)
但得到错误:
致命错误:erl_nif.h:没有这样的文件或目录
我在哪里可以找到它?我安装了erlang R14B(erts-5.8.1)
OS Arch linux.
谢谢.
我有erlang应用程序.在这个应用程序中我运行过程spawn(?MODULE, my_foo, [my_param1, my_param2, my_param3]).
而my_foo:
my_foo(my_param1, my_param2, my_param3) ->
...
some code here
...
ok.
Run Code Online (Sandbox Code Playgroud)
当我打开etop时,我看到这个my_foo/3功能状态: proc_lib:sync_wait/2
比我尝试将exit(self(),normal)放在我的函数结尾,但我看到相同的行为:proc_lib:sync_wait/2在etop中.
我怎样才能正确杀死或退出流程?
谢谢.
我正在读关于haskell的懒惰评估,并有一个问题.例如,我们有以下计算:
Prelude> let x = 1 + 1 :: Int
Prelude> let y = (x,x)
Run Code Online (Sandbox Code Playgroud)
获得价值之后x:
Prelude> :sprint x
x = _
Run Code Online (Sandbox Code Playgroud)
它没有评估.好的,现在让我们获得y的价值:
Prelude> :sprint y
y = (_,_)
Run Code Online (Sandbox Code Playgroud)
它也没有评估,因为y依赖x and it's unevaluated.现在让我们尝试相同的例子但没有::Int:
Prelude> let x = 1 + 1
Prelude> let y = (x, x)
Prelude> :sprint y
y = _
Run Code Online (Sandbox Code Playgroud)
为什么y值_,而不是(_, _)当我们试图不::Int?
我看到他们有不同的类型:
Prelude> let x = 1 + 1
Prelude> :t …Run Code Online (Sandbox Code Playgroud) 我围绕ets表的选择性能进行了一些测试,并注意到了奇怪的行为。例如,我们有一个简单的ets表(没有任何特定选项),该表存储键/值-随机字符串和数字:
:ets.new(:table, [:named_table])
for _i <- 1..2000 do
:ets.insert(:table, {:crypto.strong_rand_bytes(10)
|> Base.url_encode64
|> binary_part(0, 10), 100})
end
Run Code Online (Sandbox Code Playgroud)
还有一个具有已知密钥的条目:
:ets.insert(:table, {"test_string", 200})
Run Code Online (Sandbox Code Playgroud)
现在有一个简单的愚蠢的基准测试函数,它试图test_string从ets表中多次选择并测量每次选择的时间:
test_fn = fn() ->
Enum.map(Enum.to_list(1..10_000), fn(x) ->
:timer.tc(fn() ->
:ets.select(:table, [{{:'$1', :'$2'},
[{:'==', :'$1', "test_string"}],
[:'$_']}])
end)
end) |> Enum.unzip
end
Run Code Online (Sandbox Code Playgroud)
现在,如果我看看最大时间,Enum.max(timings)它将返回的值大约是所有其他选择值的10倍。因此,例如:
iex(1)> {timings, _result} = test_fn.()
....
....
....
iex(2)> Enum.max(timings)
896
iex(3)> Enum.sum(timings) / length(timings)
96.8845
Run Code Online (Sandbox Code Playgroud)
在这里我们可以看到最大值几乎是平均值的10倍。
这里发生了什么事?它与GC,内存分配时间或诸如此类有关吗?您是否有任何想法,为什么从ets表中进行选择有时会导致这种变慢,或者如何进行分析。
UPD。