函数

(只完成部分内容)

函数是高级语言必不可少的组成部件,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语句

递归函数

Table Of Contents

Previous topic

逻辑命令

Next topic

This Page