ocaml null关键字:曾经但没有更多?

ImA*_*reg 7 null ocaml

在ocaml toplevel(版本3.11.2),这个简单的表达式给了我一个错误:

# let a = [] in if null a then 0 else 1;;
Error: Unbound value null
Run Code Online (Sandbox Code Playgroud)

我刚开始从oreilly书中学习ocaml ,它似乎经常使用null作为关键字 - 例如,在页面32的顶部:

# let rec size a_list =
    if null a_list then 0
    else 1 + (size (List.tl a_list));;
Run Code Online (Sandbox Code Playgroud)

我很尴尬地在这里问一个明显的googleable问题.但经过大量的谷歌搜索,我空手而归.所以我对谷歌查询建议持开放态度,因为我是直截了当的答案.(谷歌尝试失败:[ocaml"错误:未绑定值null"] [ocaml null关键字] [ocaml changelog null] [ocaml change null]).

问题:一旦ocaml关键字为null,但不再是?或者我安装了ocaml错误或拼错了什么?

我当然可以在代码中用"[]"替换每次出现的"null",但我很惊讶,书中的代码的逐字副本给我这么早的错误.这本书是否充满了其他的陷阱?我相信它是用ocaml 2.04编写的; 那太旧了?我选择它是因为我喜欢TOC和在线免费提供.除了这个零错误(我还有更多的责任归咎于自己而不是作者),解释很好,我期待着混合功能和命令式风格的讨论(对我来说,思维扩展,作为某人只熟悉c/c ++).

Jef*_*eld 11

null在第31页的书中定义.这是您可以自己定义的常规函数​​:

let null l = (l = [])
Run Code Online (Sandbox Code Playgroud)

这个命名法或多或少基于Lisp,其中NIL是一个空列表(也写成()),NULL是一个谓词(一个返回true或false的函数),就像上面的null一样.