我一直在使用java来解析数字,例如
(. Integer parseInt numberString)
Run Code Online (Sandbox Code Playgroud)
是否有更多的clojuriffic方式可以处理整数和浮点数,并返回clojure数字?我并不特别担心这里的性能,我只想在一个文件中处理一堆空白分隔的数字,并以最简单的方式对它们做一些事情.
所以文件可能有如下行:
5 10 0.0002
4 12 0.003
Run Code Online (Sandbox Code Playgroud)
而且我希望能够将线条转换为数字向量.
Erlang因能够支持许多轻量级进程而闻名.它可以做到这一点,因为它们不是传统意义上的进程,甚至不是P线程中的线程,而是完全在用户空间中的线程.
这很好(实际上太棒了).但是,如何在多核/多处理器环境中并行执行Erlang线程?当然它们必须以某种方式映射到内核线程才能在不同的内核上执行?
假设情况就是这样,这是怎么做到的?许多轻量级进程是否映射到单个内核线程?
或者还有另一种解决这个问题的方法吗?
parallel-processing erlang multithreading lightweight-processes
在clojure中,关键字评估自己,例如:
>>:test
:test
Run Code Online (Sandbox Code Playgroud)
它们不接受任何参数,并且它们不受任何限制.那么,为什么我们需要在命名空间中限定关键字?
我知道isa使用derive需要命名空间限定的关键字(例如::test)创建层次结构.是否还有其他需要将关键字放在命名空间中的情况?
在SQL或NoSQL世界中是否有支持协议缓冲区的数据库?(支持可能意味着各种各样的事情,但希望包括能够在协议缓冲区中的字段索引.)
我现在正在教自己Haskell,我想知道在Haskell中处理字符串时最好的做法是什么.
Haskell中的默认字符串实现是Char列表.根据Real World Haskell的说法,这对于文件输入输出是低效的,因为每个字符都是单独分配的(我认为这意味着String基本上是Haskell中的链表,但我不确定.)
但是如果默认字符串实现对于文件i/o来说效率低下,那么在内存中使用字符串是否效率低下呢?为什么或者为什么不?C使用char数组来表示String,我认为这将是大多数语言中默认的处理方式.
正如我所看到的,String的列表实现将占用更多内存,因为每个字符都需要开销,并且还有更多时间进行迭代,因为需要指针解引用才能到达下一个char.但到目前为止我喜欢和Haskell一起玩,所以我想相信默认的实现是有效的.
在Real World Haskell中,有一个标题为"没有数组或哈希表的生命"的部分,作者建议列表和树在函数式编程中是首选,而数组或哈希表可能在命令式程序中使用.
这是有道理的,因为在创建新列表或树时,重用部分(不可变)列表或树要比使用数组更容易.
所以我的问题是:
是否有针对clojure的语言规范?在EBNF或类似的东西中精确定义词法语法和语法的东西?
我能找到的最接近的是clojure网站,但这并不完全符合语言规范的要求(尽管它是一个非常好的资源).如果没有规格,我们的BDFL是否提到了任何一个计划?
我读过Lamport 关于Paxos 的论文.我也听说过,由于性能原因,它在实践中并没有太多用处.在分布式系统中,通常使用哪些算法来达成共识?
我觉得拉链是一个很棒的主意; 它优雅地提供了一种方法来遍历列表或树,并以功能的方式显示本地更新.
渐渐地,成本似乎是合理的.但遍历数据结构需要在每次迭代时进行内存分配,其中正常的列表或树遍历只是指针追逐.这看起来很昂贵(如果我错了,请纠正我).
费用是否令人望而却步?在什么情况下使用拉链是否合理?
performance functional-programming memory-management zipper data-structures
clojure ×4
algorithm ×1
consensus ×1
database ×1
distributed ×1
erlang ×1
finger-tree ×1
haskell ×1
immutability ×1
keyword ×1
namespaces ×1
paxos ×1
performance ×1
string ×1
zipper ×1