View on GitHub

豫言

一款函数式中文编程语言

第三章:类型

类型描述了物体的性质。豫言中,每个物体都有其类型。

我们可以用类型声明来表示一个物体的类型。例如,我们可以标注结果的类型。

结果的类型是整数。
结果的定义是加使用于一使用于二。

类型标注是一个良好的编程习惯。在编译时,编译器会检查所有的类型标注,并协助你改正那些不合理的程序。例如,编译器会对如下的程序提示类型错误:

结果的类型是整数。
结果的定义是『你好』。

我们接下来介绍豫言的一些类型,以及对应的数据对象。

基础类型

基础类型包括整数,小数和字符串。

它们之间可以通过表示理解等操作相互转换。这些函数默认使用阿拉伯数字,在豫言程序源码中才使用汉字数字。

结果二的类型是字符串。
结果二的定义是整数表示使用于一二三。

打印行使用于结果二。「:会打印 123:」

结果三的类型是整数。
结果三的定义是整数理解使用于『123』。

打印行使用于(整数表示使用于(「减」使用于结果三使用于一二三))。 「:会打印 0:」

提示:用「::」包裹的字符为注释,编译器会完全忽略这些注释。

对子类型

对子类型是将两个类型结合成一对。一个对子则是把两个元素连结起来。

对子甲的类型是整数结合字符串。
对子甲的定义是一二三连结『你好』。

可以从对子可以选取需要的元素,注意:豫言中的序数一律从零开始。

乙的类型是整数。
乙的定义是对子甲中的第零个。「:乙的值是 123:」

丙的类型是字符串。
丙的定义是对子甲中的第一个。「:丙的值是 『你好』:」

我们也有三联对,四联对。

碰的类型是整数结合字符串结合整数。
碰的定义是一二三连结『你好』连结四五六。

杠的类型是整数结合字符串结合整数结合字符串。
杠的定义是一二三连结『你好』连结四五六连结『七八九』。

函数类型

函数一个类型另一个类型的变换,我们之前已经使用过以下的函数

整数表示的类型是从整数到字符串。
整数理解的类型是从整数到字符串。
打印行的类型是从字符串到有。

是一个基础类型,表示一些基础操作的返回类型。

函数也可以被定义,我们只需要定义当我们遇到了某个对象时,随后需要怎么做。例如(翻一番)

翻一番的类型是从整数到整数。
翻一番的定义是遇到了数随后「加」使用于数使用于数。

多参数函数是连续的从某些类型到最终类型的变换,比如

加的类型是从整数到从整数到整数。
乘的类型是从整数到从整数到整数。

在定义多参数函数的时候,我们要表明在我们连续遇到了某些事物的时候要怎么反应,比如

平方和的类型是从整数到从整数到整数。
平方和的定义是
    遇到了数甲随后
    遇到了数乙随后
        让甲乙和为「加」使用于数甲使用于数乙随后
        「乘」使用于甲乙和使用于甲乙和。
        

我们可以巧妙地使用换行,空格和缩进让我们的代码变得容易阅读。空格本身并不影响程序的意思。

模块类型

一个模块就是是一系列声明,一个模块的类型是一系列类型声明,比如

加法操作模块的类型是
    「
        翻一番的类型是从整数到整数。 
        平方和的类型是从整数到从整数到整数。
    」。
加法操作模块的定义是
    「
        翻一番的类型是从整数到整数。 
        平方和的定义是
            遇到了数甲随后
            遇到了数乙随后
                让甲乙和为「加」使用于数甲使用于数乙随后
                「乘」使用于甲乙和使用于甲乙和。
    」。

结语

豫言提供了完善的类型工具,我们强调的不是完全使用类型,也不是完全不用类型,而是根据可以根据情况来合理地使用类型系统。