(只完成部分内容)
函数是高级语言必不可少的组成部件,dao也不例外。不过,dao的函数既不同于C,java之类过程式语言的函数,也不同于lisp,haskell,erlang之类函数式语言的函数。erlang语言可以为函数定义多个分支,通过模式匹配选择选择函数体,在这一点上与dao比较接近。但是,erlang是纯函数式的语言,不具备逻辑式语言的特征。prolog语言是逻辑式语言的代表,其声明性的程序风格为编程带来了很多便利,但是它不具备函数式语言的特征,无法表达高阶函数和高阶谓词,表达能力有一定的局限。dao系统同时具备函数式语言和逻辑式语言的特点,同时也允许赋值等副作用的存在。这些都使得dao系统更为灵活,通用,表达能力更加强大。dinpy语言的函数也充分体现了dao的这些特点。
dinpy语言用fun关键字定义、修改和删除函数。通过不同格式的语句,dinpy提供了非常灵活的定义函数的方法。
在下一章将会介绍,dao还提供了类似于lisp和scheme的宏系统。
函数头格式: 参数...
函数体格式: 语句!...
以下函数头指的是包含在一对()中的参数序列,可以是零个,一个或多个,中间用逗号隔开。函数体指的是包含在一对[]中的语句序列,可以是一个或多个,中间用逗号隔开。
由于python语言的限制,不得不在多重定义前面添加at关键字。
覆盖函数头定义:
fun. 函数名 {{ ( 函数头 ) [ 函数体 ] }} ...
补充函数头定义
从尾部补充函数头定义:
fun. 函数名( 函数头 ) >= [ 函数体 ]
fun. 函数名( 函数头 ) >= at [ 函数体 ]...
在函数规则列表后面附加函数定义
从头部补充函数头定义:
fun. 函数名( 函数头 ) <= [ 函数体 ]
fun. 函数名( 函数头 ) <= at [ 函数体 ]...
在函数规则列表前面面插入函数定义
覆盖全函数定义:
fun. 函数名 == [ 函数体 ]
fun. 函数名 == at {{ << ( 函数头 ) >> [ 函数体 ] }}...
补充全函数定义
从尾部补充全函数定义:
fun. 函数名 >= [ 函数体... ]
fun. 函数名 >= a {{ << ( 函数头 ) >> [ 函数体 ] }}...
从头部补充全函数定义:
fun. 函数名 <= [ 函数体... ]
fun. 函数名 <= a {{ << ( 函数头 ) >> [ 函数体 ] }}...
删除函数定义
删除定元函数定义:
- fun.函数名 / 元数
删除匹配函数头定义:
- fun. ( 函数头 )