【发布时间】:2018-07-20 19:46:27
【问题描述】:
假设我有一个新的“大”类型。 例如,假设我有类型«公式»:
type formule =
|VRAI
|Predicat of char
|NON of formule
|ET of formule * formule
|OU of formule * formule
|X of formule
|G of formule
|F of formule
|U of formule * formule
现在我想要一个计算类型«公式»大小的函数。为此,我们可以使用计算二叉树节点数的相同算法。这里的问题是,如果我进行模式匹配,我必须处理很多情况,这很烦人。
如果我可以像下面的 «taille» 函数那样对参数的数量进行模式匹配,那就太好了:
let rec taille = function
|VRAI || Predicat(_) -> 1
|_(a) -> 1 + taille a
|_(a,b) -> 1 + taille a + taille b
问题是这行不通。当我编译以下代码时:
type formule =
|VRAI
|Predicat of char
|NON of formule
|ET of formule * formule
|OU of formule * formule
|X of formule
|G of formule
|F of formule
|U of formule * formule
let rec taille = function
|VRAI || Predicat(_) -> 1
|_(a) -> 1 + taille a
|_(a,b) -> 1 + taille a + taille b
我收到以下错误:
File "main.ml", line 1, characters 192-195:
Error: Syntax error
我认为它来自我不正确的模式匹配,但在这种情况下,为什么我在第一行有错误?
此外,如果它确实来自我的模式匹配,有没有办法像 «taille» 那样进行模式匹配(对参数数量进行模式匹配以减少案例数量)。
谢谢!
【问题讨论】:
-
报错信息很奇怪,OCaml好像以为整个程序写在一行上。你用的是哪个编辑器?你在 Windows 上工作吗?
-
你是对的。实际上,它来自于从 pdf 文件中复制和粘贴代码的事实。所以小编觉得整个程序写在一行里
标签: functional-programming ocaml