首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCaml重载数字文字与Camlp4

OCaml重载数字文字与Camlp4
EN

Stack Overflow用户
提问于 2015-12-24 05:46:49
回答 2查看 115关注 0票数 1

我正在用一些组合学实用工具编写一个小脚本。当我需要不同类型的数字文本(如01 )时,我使用_0_1,但这个解决方案并不理想。是否可以使用Camlp4在给定的上下文中重新解释数字文字,或者添加具有专用后缀的新类型的数字文字?

代码语言:javascript
复制
open Num
let zero = num_of_int 0
let one = num_of_int 1
let _0 = zero
let _1 = one

(* some useful infix operators *)
let ( + ) = ( +/ )
let ( - ) = ( -/ )
let ( * ) = ( */ )
let ( < ) = ( </ )
let ( > ) = ( >/ )
let ( = ) = ( =/ )
let ( / ) numer denom = 
    if mod_num numer denom = _0
    then div_num numer denom
    else invalid_arg "division is not a total function"

(* factorial, naive *)
let rec fact n =
    if n < _0
    then invalid_arg "negative factorial"
    else if n = _0
    then _1
    else
        n * fact (n - _1)

(* naive algorithm *)
let choose n k = (fact n / fact k) / fact (n - k)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-24 09:10:52

总之,没有。Camlp4是非类型化解析树的预处理器。它不能做这种类型敏感的事情。

如果您需要(我敢打赌您不会),您可以对Camlp4中的非类型化解析树执行类型检查,并推断出特殊数字的类型,然后用相应的值替换它们。这在理论上是可能的,但从未尝试过,因为P4的解析树与OCaml的解析树完全不同。

PPX预处理器是用来取代Campl4的,它有一些希望,因为它处理与OCaml相同的非类型化的解析树,因此很容易应用OCaml类型检查器。TyPPX (https://bitbucket.org/camlspotter/typpx)是一个为类型相关的预处理提供API的框架。

票数 1
EN

Stack Overflow用户

发布于 2015-12-24 16:20:05

您可能需要查看定界超载 --它需要通过将表达式e包围为M.(e)来限定常量,其中M是模块的名称(您可以定义别名)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34447891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档