我正在尝试在我的一个Haskell应用程序中嵌入一个Haskell REPL.我们的想法是,默认情况下只加载Haskell库的一个子集,加上我自己的一组函数,用户可以使用它们来与环境进行交互.
为了解决这个问题,我知道一种方法是创建一个(迷你)Haskell解析器+求值器并将我的mini-Haskell解析器的函数映射到实际的Haskell函数,但我确信有更好的方法来做到这一点.
有没有一种漂亮而干净的方法来使用Haskell为Haskell构建REPL?
据我所知,Haskell中的列表类型是使用链表在内部实现的.但是,该语言的用户无法查看实现的详细信息,也无法修改组成链接列表的"链接"以允许其指向不同的内存地址.我想,这是内部完成的.
那么,如何在Haskell中限定列表类型?它是"数据类型"还是"抽象数据类型"?那个实现的链表类型是什么?
另外,由于Prelude提供的列表类型不是链表类型,如何实现基本链表功能?
举例来说,这段代码旨在在列表的索引n处添加元素a:
add [] acc _ _ = reverse acc
add (x:xs) acc 0 a = add xs (x:a:acc) (-1) a
add (x:xs) acc n a = add xs (x:acc) (n-1) a
Run Code Online (Sandbox Code Playgroud)
使用"真实"链表,添加元素只需修改指向内存地址的指针.这在Haskell中是不可能的(或者是它?),因此问题是:我的实现是将一个元素添加到列表中最好的一个,或者我错过了一些东西(reverse我觉得,使用该函数特别难看,但是可以不做吗?)
如果我说的话有误,请不要犹豫,纠正我,谢谢你的时间.
我正在尝试使用Menhir解析器(类似于Ocamlyacc)解析运算符具有动态属性(优先级和优先级)的语言.在lexing阶段,所有操作员都填充一个OP:string令牌(所以"+"变成(OP "+")等等).
运算符属性在解析时确定,并填充关联运算符及其属性的表.鉴于此表,我如何指示Menhir根据此表的数据动态更改解析运算符的规则的优先级?
谢谢,CharlieP.
Kafka 0.8的相对稀缺的文档没有提到平衡现有主题,分区和经纪人副本的预期行为.
更具体地说,经纪人到达时的预期行为和经纪人(领导者与否)的崩溃是什么?
谢谢.
haskell ×2
parsing ×2
apache-kafka ×1
linked-list ×1
list ×1
menhir ×1
ocaml ×1
ocamlyacc ×1
types ×1