令第三部分;:第11章sua| Prolog数据元素 11.1.2复合论域 举例 domains t1 = ffo; gg(t2) t2=h(t1,t1) t1是一个带有两个选项的复合论域。第一个选项是空变元算符ff第二个选 项是一元算符gg,采用论域t2的项作为参数。t2是一个带有一个选项算符h 的复合论域,算符hh采用两个t1项作为参数。因此,论域t1和t2是相互递归的。 以下表达式是论域t1的项: ff o gg(hh(ffo, ffo gg(hh(gg(hh(ffo, ff)), ff) gg(hh(ffo, gg(hh(ffo, ff) gg(hh(gg(hh(ffo, ff)), gg(hh(ffo, ffO) 2004.11.3 A|程序设计
第三部分:第11章 Visual Prolog数据元素 2004.11.3 AI程序设计 11 11.1.2 复合论域 举例 domains t1 = ff(); gg(t2). t2 = hh(t1, t1). t1是一个带有两个选项的复合论域。第一个选项是空变元算符ff。第二个选 项是一元算符gg,采用论域t2的项作为参数。t2是一个带有一个选项算符hh 的复合论域,算符hh采用两个t1项作为参数。因此,论域t1和t2是相互递归的。 以下表达式是论域t1的项: ff () gg (hh(ff(), ff())) gg (hh(gg(hh(ff(), ff())), ff())) gg (hh(ff(),gg(hh(ff(), ff())))) gg (hh(gg(hh(ff(), ff())), gg(hh(ff(), ff()))))
令第三部分;:第11章sua| Prolog数据元素 11.1.3列表论域 列表论域( List domains)代表一个特定论域的值序列。这样,列表T中的所有元素 必须是T类型。 listDomain typeName 这里, T*是T元素列表的类型 function Ca是 下列语法用于列表 个函数调用,返回 一个 listDomain listExpression I term-comma-sep-list -opt 类型的值。 ConstantName I term-comma-sep-list constantName factVariableNam term-comma-sep-listI factVariable Name e和 ariableName I term-comma-sep-listI functionCall 应当是 I term-comma-sep-list I variableName listDomain类型 term-comma-sep-list| anonymousIdentifier每一项都应当是 term-comma-sep-list listExpression typeName类型。 2004.11.3 A|程序设计
第三部分:第11章 Visual Prolog数据元素 2004.11.3 AI程序设计 12 11.1.3 列表论域 列表论域(List Domains)代表一个特定论域的值序列。这样,列表T中的所有元素 必须是T类型。 listDomain : typeName * T*是T元素列表的类型。 下列语法用于列表: listExpression : [ term-comma-sep-list-opt ] [ term-comma-sep-list | constantName ] [ term-comma-sep-list | factVariableName ] [ term-comma-sep-list | functionCall ] [ term-comma-sep-list | variableName ] [ term-comma-sep-list | anonymousIdentifier ] [ term-comma-sep-list | listExpression ] 这里, functionCall是一 个函数调用,返回 一个listDomain 类型的值。 ConstantName, factVariableNam e和ariableName 应当是 listDomain 类型。 每一项都应当是 typeName 类型
令第三部分;:第11章sua| Prolog数据元素 11.1.3列表论域 实际上,列表仅仅是带有两个算符的复合论域:[]指示空列表;算 符[HD|TL]指示该列表具有表头HD和表尾TL。表头必须是基本元素 类型,而表尾必须是一个相关类型的列表。 因此列表从语法上可以被修饰为: [E1,E2,E3,…,En|L]是[E1[E2[[.[En|L]….]的 简记。 [E1,E2,B3,…En是[E1,E2,E3,…,En{[]的简记,继而是 [E1|[E2|.[En|[]..]的简记。 2004.11.3 A|程序设计 13
第三部分:第11章 Visual Prolog数据元素 2004.11.3 AI程序设计 13 11.1.3 列表论域 实际上,列表仅仅是带有两个算符的复合论域:[]指示空列表;算 符[ HD | TL ]指示该列表具有表头HD和表尾TL。表头必须是基本元素 类型,而表尾必须是一个相关类型的列表。 因此列表从语法上可以被修饰为: [E1, E2, E3, ..., En | L ] 是[E1 |[ E2 |[ ...[ En | L ]...]]]的 简记。 [E1, E2, E3, ..., En]是[E1, E2, E3, ..., En |[]]的简记,继而是 [E1 |[ E2 |[ ...[ En | [] ]...]]]的简记
令第三部分;:第11章sua| Prolog数据元素 11.1.4引用论域 一个引用论域( Reference domains)与构造它的原始论域类似, 除此之外,引用论域变量的值也可以是自由变量(即" unknown")。 referenceDomain reference reference domain description reference DomainDescription: type/ame compoundDomain listDomain 如果一个引用论域由一个复合论域构造,在算符中嵌套的所有论域也 必须是引用论域。 一个引用论域是一个基本的非引用论域的超论域。引用论域不是任何 其它论域的子类型。 2004.11.3 A|程序设计 14
第三部分:第11章 Visual Prolog数据元素 2004.11.3 AI程序设计 14 11.1.4 引用论域 一个引用论域(Reference Domains)与构造它的原始论域类似, 除此之外,引用论域变量的值也可以是自由变量(即"unknown")。 referenceDomain : reference referenceDomainDescription referenceDomainDescription : typeName compoundDomain listDomain 如果一个引用论域由一个复合论域构造,在算符中嵌套的所有论域也 必须是引用论域。 一个引用论域是一个基本的非引用论域的超论域。引用论域不是任何 其它论域的子类型