在过去的一年左右的时间里,我一直在哈斯克尔身边玩耍,我实际上已经开始'得到'它,直到Monads,Lenses,Type Families,......很多.
我即将离开这个舒适区,我正在转向OCaml项目作为日常工作.稍微研究一下语法,我正在寻找类似的更高级别的概念,例如functor.
我阅读了OCaml中的代码和仿函数的结构,但我似乎无法知道它们现在是否是Haskell和OCaml中的类似概念.简而言之,Haskell中的仿函数对我来说主要是一种在Haskell中提升函数的方法,我就是这样使用它(并且喜欢它).在OCaml中,它给我一种感觉,它更接近于编程到界面(例如,当使用比较函数创建一个集合或列表时),我真的不知道如何提升函数而不是仿函数.
有人可以解释我这两个概念是否相似,如果是这样,我错过了什么或没有看到什么?我用Google搜索了一下,似乎找不到明确的答案.
卡斯帕
我想向初学者宣传OCaml,我正在寻找英语的好教程; 不仅仅是你听说过,而是你实际上已经尝试并发现有用......
我一直在寻找持久的实时可连接deques的工作.有各种方法具有用于连接deques的对数复杂性,有些方法具有摊销的常数时间实施,但实时(非摊销)具有恒定时间连接的deques少得多.
众所周知的实时可连接deque是1999年由Haim Kaplan和Robert Tarjan撰写的文章,Purely Functional,Real-Time Deques with Catenation.然而,关于deques 的维基百科页面和这个梦幻般的StackOverflow答案都提到了Robert Tarjan和Radu Mihaescu最近的工作(显然是2003年),这应该更简单.
有没有人链接到Robert Tarjan和Mihaescu关于这项工作的出版物?我在浏览网页时唯一能找到的就是一个.doc文档,显然是某些课程笔记的一部分,而且这种格式既不舒服,也不够可靠,无法实现.
有些网页将第二作者称为"Mihaesau",这似乎是一个错误.我找到了一个DBLP的出版物列表,更近期,没有提及可连接的队列,以及一个微薄的网页,没有链接到出版物部分.
我正在研究一些使用树木的程序.我想知道是否有任何代码可以在OCaml中绘制一般树.
type Tree = Node of Tree * int * Tree | Child of int;;
Run Code Online (Sandbox Code Playgroud)
我在互联网上找到的只使用Caml Light,而不是Objective Caml.
提前致谢.
RISC-V规范v2.2(JAL指令,第15页)说"标准调用约定":
标准软件调用约定使用x1作为返回地址寄存器,x5作为备用链接寄存器.
以下设计评论:
备用链接寄存器支持调用毫代码例程(例如,用于在压缩代码中保存和恢复寄存器的例程),同时保留常规返回地址寄存器.
什么是替代链接注册?
据我所知,"链接寄存器"是一个寄存器,用于存储pc在返回时跳转到,并且该millicode/microcode是低于ISA级别的低级指令格式.这个想法x5是用来代替x1围绕"正常调用"的某些(微代码/毫字节)指令来避免寄存器改组或溢出吗?你有一个典型的用法例子吗?
它可帮助的替代链接寄存器的说明添加到维基百科的文章链接寄存器,这是我去寻找额外的信息.
我和ocaml有麻烦.
我想创建一个函数,每次调用它时都会递增计数器,并用计数器号连接我的vargen字符串并返回这个新字符串.
我没有成功的是:
let (counter : int ref) = ref 0;;
let (vargen : string) = "_t";;
let tmp = incr counter;ref (vargen ^ string_of_int !counter);;
Printf.printf "%s\n" !tmp;;
Printf.printf "%s\n" !tmp;;
Printf.printf "%s\n" !tmp;;
Printf.printf "%s\n" !tmp;;
Run Code Online (Sandbox Code Playgroud)
但我的输出总是:
_t1
_t1
_t1
_t1
Run Code Online (Sandbox Code Playgroud)
我的输出应该是什么:
_t0
_t1
_t2
_t3
Run Code Online (Sandbox Code Playgroud)
有什么想法来解决我的问题吗?
总而言之.