函数 ***** **(只完成部分内容)** 函数是高级语言必不可少的组成部件,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. ( 函数头 ) let和letr语句 ------------- 递归函数 ------------