为什么以“ A_of_B”的形式命名OCaml类型转换函数?

问题描述 投票:0回答:2

类似“ A_of_B”的名称是OCaml中的唯一命名约定,但是我想知道为什么。这是法语和英语使用不同语言的结果吗?还是Xavier Leroy的个人喜好?

背景:我发现OCaml的类型转换函数的名称类似于A_of_B,例如Stdlib模块中的int_of_string : string -> intfloat_of_int : int -> float。其他流行语言使用的名称类似于AtoB,例如C中的itoa函数。

ocaml naming
2个回答
3
投票

我的猜测是,在将函数用作值(例如,具有更高阶的功能,例如功能组合。例如:

# let compose f g = fun x -> f (g x);;
val compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>

这里,成分直接反映在名称中:

# let string_of_float = compose string_of_int int_of_float;;
val string_of_float : float -> string = <fun>

而以相反的顺序读取具有函数名称的等效项可能会有点困难:

compose int_to_string float_to_int

0
投票

首先,让我们从简短的介绍开始,到history of OCaml。 Xavier Leroy并不是该语言的发明者,而且该语言也不是法国出生的。 OCaml源自LCF(可计算函数逻辑)定理证明者的元语言(ML),该定理证明者由Robin Milner在斯坦福大学和爱丁堡大学开发。以下是从原始LCF 1977中获得的代码片段,

   let gensrinfo th =
     let srthm = disjsrvars th in 
     let hypfrees = formlfrees(hyp srthm)
     and hyptyvars = formltyvars(hyp srthm)
     and (),p,() = destimpequiv(concl srthm) in 
     srthm , termmatch(hypfrees,hyptyvars) p;;

它类似于某些东西吗? ;)不久之后,法国的Formel团队基于分类抽象机开发了新的ML implementation ML,后来变成了SML,而Caml本身比上面的代码段晚了10年在1987年。三年后的1990年,Xavier Leroy基于名为ZINC的字节码解释器设计了全新的Caml implementation。五年后,他们开发了一个优化的编译器,再过了五年,在2000年,Objective Caml诞生了,又名O'Caml,现在是OCaml。

可以说,ML最初是由英语社区设计和开发的,没有理由寻找法语的常规词源或Xavier的偏爱。实际上,我们确实可以在LCF(例如intoftoktokofint运算符)和LCF的其他派生词(例如HOL)中找到该约定,例如,HOL 1988标准库已经具有功能int_of_string,位于那时Xavier尚未毕业。

所以,为什么要使用这个约定?它来自对程序进行推理的方式,这是逻辑而不是命令性的(请记住,ML在定理证明者中是作为元语言(逻辑语言)诞生的)。我们不是在考虑如何实现一个功能,而是在考虑术语[[what,所以int_of_string "42"是什么?它是一个整数,文本表示为“ 42”。我们不将[42]转换为整数并将其视为转换框,而是像数学中那样采用declarative思维,例如cos 0.0不会将0.0转换为1.0 ],cos 0.0 1.0。这种思维方式促进了equational reasoning -一种思考程序和理解其语义的有效方法。

© www.soinside.com 2019 - 2024. All rights reserved.