AIML <condition> 循环的主体无法在 Pandorabots 中执行
Body of AIML <condition> loop fails to execute in Pandorabots
我正在尝试使用 Pandorabots, with the standard library 中的 AIML 循环列表,通过 MS Edge 在最新的 Windows 11.
以下所有代码都出现在相同的 <think>
标签中。
在此循环之前还有另一个循环。这两个循环在功能上是相同的。每个循环引用不同的从零开始的索引到谓词名称的映射,以便将所有谓词值设置为“未知”。
唯一的区别是两个地图文件;它们之间的唯一区别是大小写和(微不足道的)字符串长度,它们都适用于其他上下文:
[["0", "HI"], ["1", "BY"], ["2", "OK"], [ ... ]]
和 [["0", "hello"], ["1", "byenow"], ["2", "okay"], [ ... ]]
所以第一个循环有效,但是这个循环显然什么也没做:
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<!-- reset predicate -->
<set><name><map name="thingsdict"><get var="i" /></map></name>
unknown
</set>
<!-- increment and check for OOR -->
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="thingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
这是上一个循环,正确运行的循环:
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<!-- reset predicate -->
<set><name><map name="otherthingsdict"><get var="i" /></map></name>
unknown
</set>
<!-- increment and check for OOR -->
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="otherthingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
完全相同,不是吗?
编辑:完整类别(为了调试注释掉了 think 标签):
<category>
<pattern>5</pattern>
<template>
Starting over...
<br/><br/>
<!--<think>-->
<set name="mode">unknown</set>
<set name="score">unknown</set>
<set name="ties">unknown</set>
<set name="tiecount">unknown</set>
<!-- loop through first map of related predicates -->
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<map name="thingsdict"><get var="i" /></map>
<set><name><map name="thingsdict"><get var="i" /></map></name>
unknown
</set>
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="thingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
<!-- loop through other related predicates -->
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<map name="otherthingsdict"><get var="i" /></map>
<set><name><map name="otherthingsdict"><get var="i" /></map></name>
unknown
</set>
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="otherthingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
<!--</think>-->
All values erased!
<br/><br/>
<srai>HI</srai>
</template>
</category>
在此先感谢您的帮助!
任何 <loop/>
标签必须出现在 <li>
标签内。一定要包含一组 <li>
标签,同时不包含 <loop/>
元素;这些可以为空或不为空。
我正在尝试使用 Pandorabots, with the standard library 中的 AIML 循环列表,通过 MS Edge 在最新的 Windows 11.
以下所有代码都出现在相同的 <think>
标签中。
在此循环之前还有另一个循环。这两个循环在功能上是相同的。每个循环引用不同的从零开始的索引到谓词名称的映射,以便将所有谓词值设置为“未知”。
唯一的区别是两个地图文件;它们之间的唯一区别是大小写和(微不足道的)字符串长度,它们都适用于其他上下文:
[["0", "HI"], ["1", "BY"], ["2", "OK"], [ ... ]]
和 [["0", "hello"], ["1", "byenow"], ["2", "okay"], [ ... ]]
所以第一个循环有效,但是这个循环显然什么也没做:
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<!-- reset predicate -->
<set><name><map name="thingsdict"><get var="i" /></map></name>
unknown
</set>
<!-- increment and check for OOR -->
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="thingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
这是上一个循环,正确运行的循环:
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<!-- reset predicate -->
<set><name><map name="otherthingsdict"><get var="i" /></map></name>
unknown
</set>
<!-- increment and check for OOR -->
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="otherthingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
完全相同,不是吗?
编辑:完整类别(为了调试注释掉了 think 标签):
<category>
<pattern>5</pattern>
<template>
Starting over...
<br/><br/>
<!--<think>-->
<set name="mode">unknown</set>
<set name="score">unknown</set>
<set name="ties">unknown</set>
<set name="tiecount">unknown</set>
<!-- loop through first map of related predicates -->
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<map name="thingsdict"><get var="i" /></map>
<set><name><map name="thingsdict"><get var="i" /></map></name>
unknown
</set>
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="thingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
<!-- loop through other related predicates -->
<set var="i">0</set>
<set var="allreset">FALSE</set>
<condition var="allreset" value="FALSE">
<map name="otherthingsdict"><get var="i" /></map>
<set><name><map name="otherthingsdict"><get var="i" /></map></name>
unknown
</set>
<set var="i"><map name="successor"><get var="i" /></map></set>
<set var="allreset">
<srai>XEQ <map name="otherthingsdict"><get var="i" /></map> XS unknown</srai>
</set>
<loop />
</condition>
<!--</think>-->
All values erased!
<br/><br/>
<srai>HI</srai>
</template>
</category>
在此先感谢您的帮助!
任何 <loop/>
标签必须出现在 <li>
标签内。一定要包含一组 <li>
标签,同时不包含 <loop/>
元素;这些可以为空或不为空。