AIML 在这个条件循环中不打印任何东西; XCAR 在该条件循环内的嵌套类别中,将输入句子视为单个单词

AIML not printing anything within this one condition loop; XCAR in nested category inside that condition loop treating input sentence as a single word

使用 the standard library.

代码看起来像 <srai>XCAR AB, CD</srai>

但是堆栈跟踪显示 [0] srai of XCAR AB,CD 删除了 space。

使用 Pandorabots.com.

我正在尝试使用 XSUBSTRING 遍历一串 , 划定的长度一致的单词,以便将每个单词映射到人类可读的输出。

所以我使用嵌套类别根据来自外部类别的更新索引谓词获取并打印每个 XSUBSTRING 的 XCAR。

这是外部类别的代码:

<category>
    <pattern>COMMAND</pattern>
    <template>
        <think>
            <set name="index">0</set>
            <set name="allitemsprinted">FALSE</set>
        </think>
        
        This part prints for me.
        <br/><br/>
        So does this.
        
        <!-- iterate through "ties" -->
        <condition name="allitemsprinted" value="FALSE">
            But this doesn't print.
            Nor does anything after.
            This srai works correctly:
            <srai>XCDR UX, SE, CS</srai>
            <srai>PRINT ITEM</srai>
            <loop/>
        </condition>
        
        <br/>
    </template>
</category>

这是嵌套类别:

<category>
    <pattern>PRINT ITEM</pattern>
    <template>
        <think>
            <set var="itemlocation">
                <!-- 2-char name plus delim -->
                <srai>XMUL <get name="index"/> XS 4</srai>
            </set>
            
            <set var="remainingitems">
                <srai>XSUBSTRING <get name="items"/> XS <get var="itemlocation"/></srai>
            </set>
            
            <!-- increment index -->
            <set name="index">
                <map name="successor">
                    <get name="index"/>
                </map>
            </set>
            
            <!-- check for end of list -->
            <set name="allitemsprinted">
                <srai>XGT <get name="index"/> XS <get name="itemcount"/></srai>
            </set>
        </think>
        
        Remaining items: <get var="remainingitems"/>
        
        First remaining item: <srai>XCAR <get var="remainingitems"/></srai>
        
        <!-- human-readable output -->
        <map name="itemsreadable">
            <srai>XCAR <get var="remainingitems"/></srai>
        </map>
        <br/>
    </template>
</category>

Pandorabots 提供的堆栈跟踪显示 <condition> 中的 <srai> 确实被调用了。但是它根本不会打印任何东西。

首先,确保 normal.substitution 有一个用于删除逗号的条目 [",", ""],,因为机器人很少需要处理逗号。

假设您的地图是这样的:

[
    ["UX", "User Experience"], 
    ["SE", "Sales Entry"], 
    ["CS", "Customer Services"]
]

然后您可以这样做以获得人类可读的输出(为此您不需要标准库):

<category>
    <pattern>COMMAND</pattern>
    <template>
        <think><set name="itemlist">UX, SE, CS</set></think>
        <srai>PRINT ITEM <get name="itemlist"/></srai>
    </template>
</category>

<category>
    <pattern>PRINT ITEM * *</pattern>
    <template>
        <map name="itemsreadable"><star/></map><br/>
        <srai>PRINT ITEM <star index="2"/></srai>
    </template>
</category>

<category>
    <pattern>PRINT ITEM *</pattern>
    <template>
        <map name="itemsreadable"><star/></map>
    </template>
</category>

这将产生以下结果: