对话–互动小说的领域特定语言

2021-03-04 00:35:54

免责声明:我对别人(除了我自己)在论坛中写的内容不承担任何责任。请举报任何侮辱,诽谤,垃圾邮件和非法材料之类的虐待行为,我将采取适当的措施。不要给巨魔喂食。

除我自己的帖子外,我对论坛中的内容不承担任何责任。请举报任何违反规则的帖子,我将拭目以待。违规包括例如侮辱,诽谤,垃圾邮件和非法材料。不要喂拖网。

如果我在封闭的透明容器中有一个对象,该如何覆盖默认值'您可以' t不能达到obj'接受失败消息? (而不是[take *])' t在这种情况下似乎不起作用(范围?)

如果我在封闭的透明容器中有一个对象,该如何覆盖默认值'您可以' t不能达到obj'接受失败消息? (而不是[take *])' t在这种情况下似乎不起作用(范围?)

"可以'无法到达"消息由(拒绝$)打印,它在代替之前被调用。因此,您可以使用否定规则覆盖拒绝:〜(refuse [take *])%% Don' t拒绝接受此对象。

是否可以暂时抑制隐式动作。例如1.在放置的容器中放置东西首先要尝试在放置之前取走物体。 2.将某物放入第一个存放在存放容器中的东西,然后再尝试放入。如果我知道该提取将永远成功,那么我可以禁止执行第一个尝试进行报告的事情。

如果我知道举报将永远成功,那么我可以取消第一次举报的尝试。

是的,有几种方法。您可以使用否定规则覆盖该特定情况的先行谓词。对于每个特定动作:〜(在[drop $ X]之前)($ X是$ Y中的#X)($ Y是$ Z被$ Z持有)(当前玩家$ Z)但是许多动作调用一个公共谓词' (确保$被保留)&#39 ;,您可以改为向其中添加新规则:(确保$ X被保留)($ X是$ y中的$ X)($ Y是$ Z中的$ hold)(当前玩家$ Z)在给定条件为真时,您的规则将成功执行,这将阻止执行库中更高的规则定义。

黑暗斗篷示例似乎在0.15以下错误。尝试去某个地方会导致崩溃:致命错误:尝试存储到不存在的局部变量3:例程的值为0(pc = 0x2aba)

黑暗斗篷示例似乎在0.15以下错误。尝试去某个地方会导致崩溃:致命错误:尝试存储到不存在的局部变量3:例程的值为0(pc = 0x2aba)

这很奇怪。运行第5章中的第一个示例时,我遇到相同的错误。如果重要的话,我正在Windows 10上运行win32版本的dialogc。

现在,我检查了编译器的每个发行版,发现在房间之间移动仅在版本0b / 01下有效。迟于导致上述致命错误。

现在,我检查了编译器的每个发行版,发现在房间之间移动仅在版本0b / 01下有效。迟于导致上述致命错误。

不知道它是否相关,但是我只在使用石像鬼时得到错误。 Frotz没有给出错误。 (最新版本的Windows 10)

不知道它是否相关,但是我只在使用石像鬼时得到错误。 Frotz没有给出错误。 (最新版本的Windows 10)

谢谢你。可以验证。有谁知道将错误报告传递给其中一位维护者的最佳方法?

我可以从评分选项中引用对象变量吗? (将得分增加(#object变量))

我可以从评分选项中引用对象变量吗? (将得分增加(#object变量))

通常,查询不能嵌套;他们甚至没有返回值。 (令人困惑的是,规则头可能包含嵌套表达式,但这是语法糖的特例。)但是可以使用普通参数来传递输出。要从一个查询中获取输出,并在另一个查询中用作输入,则可以一个接一个地编写查询。然后,您将使用变量来携带值。假设您有一个谓词($得分为$)为每个对象分配一个得分:(#object的得分为$ X)%%在这里,$ X被绑定(即到输出)。 (将分数增加$ X)%%使用$ X的值作为输入。

以下代码使编译器崩溃:如果将(else)替换为(if),则会得到一条更合理的消息:" Error(if)不包含(then)。 **评论编辑器似乎剥夺了缩进...是否接受某种标记。 ? (即第二行(其他)已缩进。另外,我在源文件中还有更多内容,我将崩溃隔离到这两行。声明失败!程序:c:\ bats \ dialogc.exe文件:backend_z。 c,第3348行表达式:call_lab --------------------(故事标题)(其他)

实际的''上面的用例是我不小心逃脱了标题,即(故事标题)(Else)测试文件而不是(故事标题)\(Else \)测试文件

谢谢!我会解决这个问题。当前没有标签可保留评论中的格式;对此表示抱歉。我一直在使用硬空间来解决它。我想我也会解决这个问题。

是旨在在开放代码中使用的全局标志(或者也许是(现在)谓词) (像全局变量一样?)如果我在打开代码中放入:(现在)(一个全局标记),我会得到:"特殊语法无法重新定义" Mike

是否设计为可在开放代码中使用的全局标志(或也许是现在的谓词)? (像全局变量一样?)如果我在打开代码中放入:(现在)(一个全局标记),我会得到:"无法重新定义特殊语法" Mike

从一行的第一列开始的任何内容都将解释为规则定义,因此编译器认为您正在尝试为谓词(现在)定义规则。但这是特殊的语法,因此无法修改其行为。如果希望初始设置全局标志,请定义一个空规则主体的规则:(a-global-flag)这类似于如何定义其他种类的动态属性的初始值。例如:(#box是#heldby #player)(#box已打开)(当前玩家#player)

好的,谢谢,这可行...但是..." first-column-global" (fcg?:))没有显示在调试器的@dynamic输出中。如果我输入(a-global-flag),该标志*确实可以工作,但如果成功完成预期的查询:(a-global-flag)@dy(namic)cmd似乎是只找到规则内引用的全局标志:(测试)__(现在)(a-global-flag)迈克

@dy(namic)cmd似乎仅找到规则内引用的全局标志

那是正确的。仅当谓词出现在(现在)语句中的某个位置时,该谓词才被认为是动态的。因此,如果某处有一个(现在)(一个全局标志),则(一个全局标志)被视为可以在运行时切换的布尔变量。其初始值由其规则定义确定。否则,它的行为更像是布尔值函数,并且规则定义构成其函数主体。这是一个术语问题。可以改变的东西是动态的,但是不可能改变的东西不是动态的。

这会使Windows和linux-64编译器版本0d02_0_19和0e01_0_20崩溃,但不会使0c05_0_17版本#gnue(name *)gnue(dict *)plane(vehicle *)崩溃。我试图将一个较大的程序拆分为多个文件。麦克风

谢谢!我可以复制它。有趣的是,我可以通过添加一个房间来使程序得以编译:(room #x)但是,它当然仍然是一个编译器错误,我会尽快修复它。

我认为可能存在一个带有(启用可替换性的外观$ $ $)的错误,我注意到当我在某个对象上设置(启用可替换性)一个显式(外观$ $ $)规则时,该对象不会移动,直到该对象被移动。经过一番挖掘,我得出的结论是问题出在stdlib第3788行。似乎正在发生的事情是,当什么都没有碰到时,由(启用可移植性的外观$ $ $)处理的列表开始于没有外观的对象,这意味着规则在第一个对象上失败,并且永远不会重复发生。如果我添加一个(or)使其读为(if)($ Ninc = 1)(then)(外观$ Head $ Rel $ Loc)(或),它将起作用。我不确定添加(或)只是为了防止失败是当然的好方法...保罗

谢谢!这确实是一个错误,因此我添加了'(or)'在库版本0.24中。我认为这是一个相当干净的解决方案。另一种选择是为'(appearance $ $ $)'添加默认规则定义。规则主体为空白,但这样的更改也会影响没有利用可替代性的故事,因此我决定反对。至少现在。

我似乎无法建立这个。在压缩包中似乎缺少backend.c和backend_z.h。

我似乎无法建立这个。在压缩包中似乎缺少backend.c和backend_z.h。

哎呀!现在应该固定在0g / 02中,否则相同。

我似乎无法建立这个。在压缩包中似乎缺少backend.c和backend_z.h。

哎呀!现在应该固定在0g / 02中,否则相同。

那让我走了,谢谢。您是否曾经考虑过将其放在公共存储库中,以便其他人也可以做出贡献?我真的很喜欢这个系统的想法:它是编写和编程之间的一个好地方。

我已经发布了《拾起电话亭和骰子到对话框》的几乎完整的转换。 https://github.com/jpcompton/Dialog-diversions请欣赏可疑的代码示例,进行改进或激发灵感!

我只是尝试了一个hello世界示例,并对编译器(对话框,版本0h / 02,库0.30,针对Linux x64预先构建)进行了段错误处理$ cat test.dg(story ifid)B0E2A7D1-45F7-46A1-8348-53ADA71F2CD8(程序入口点)我们将慢慢找出它是如何工作的。 $ valgrind dialogc test.dg == 14539 == Memcheck,内存错误检测器== 14539 ==版权所有(C)2002-2017,以及Julian Seward等人的GNU GPL' d。 == 14539 ==使用Valgrind-3.13.0和LibVEX;使用-h重新运行以获取版权信息== 14539 ==命令:dialogc test.dg == 14539 == == 14539 ==大小为1的无效读取== 14539 ==在0x12A4FA:addstr_escape.constprop.1(在/ usr中/ local / bin / dialogc)== 14539 ==通过0x12AE3D:emit_blorb(在/ usr / local / bin / dialogc中)== 14539 ==通过0x129FF1:backend_z(在/ usr / local / bin / dialogc中)== 14539 ==通过0x10D487:main(在/ usr / local / bin / dialogc中)== 14539 ==地址0x0不是堆栈,malloc或(最近)空闲== 14539 = = == 14539 == == 14539 ==进程以信号11(SIGSEGV)的默认操作终止== 14539 ==访问不在地址0x0的映射区域内== 14539 ==在0x12A4FA:addstr_escape.constprop.1(in / usr / local / bin / dialogc)== 14539 ==通过0x12AE3D:emit_blorb(在/ usr / local / bin / dialogc中)== 14539 ==通过0x129FF1:backend_z(在/ usr / local / bin / dialogc)= = 14539 ==通过0x10D487:main(在/ usr / local / bin / dialogc中)== 14539 ==如果您认为这是由于堆栈而导致的== 14539 ==程序主线程中的溢出(不太可能,但== 14539 == possi ble),您可以尝试使用--main-stacksize =标志来增加== 14539 ==主线程堆栈的大小。 == 14539 ==此运行中使用的主线程堆栈大小为8388608。== 14539 == == 14539 ==堆摘要:== 14539 ==出口处使用:657块中的613,930字节== 14539 ==总堆使用量:1,170个分配,513个释放,1,450,866个字节已分配== 14539 == == 14539 ==泄漏摘要:== 14539 ==绝对丢失:50个块中的7,600字节== 14539 ==间接丢失:206,966字节102个块== 14539 ==可能丢失:0个字节中的0个字节== 14539 ==仍可访问:505个块中的399,364个字节== 14539 ==被抑制:0个块中的0个字节== 14539 ==用--leak重新运行-check = full以查看泄漏的内存的详细信息== 14539 == == 14539 ==对于检测到的和抑制的错误计数,请重新运行:-v == 14539 ==错误摘要:1个上下文中有1个错误(抑制:0从0开始)分段错误(核心已转储)

我只是尝试了一个hello world示例,并对编译器进行了段错误处理(Dialog,版本0h / 02,库0.30,已针对Linux x64预先构建)

感谢您举报!对于zblorb格式的少量输入(即没有标准库),似乎会发生这种情况。今晚我将修复它。同时,要么切换到z8格式,要么包括标准库。

我只是尝试了一个hello world示例,并对编译器进行了段错误处理(Dialog,版本0h / 02,库0.30,已针对Linux x64预先构建)

现在,此问题已在0h / 03中修复。

使用dialogc-0h03:无论输出格式如何,以下程序都会使编译器崩溃。它适用于版本0d02。 (程序入口点)(现在)〜($具有父$)错误消息:backend_z.c:2010:generate_code:断言`ci-> oper [0] .value!= DYN_HASPARENT'失败的。 and backend_aa.c:1350:compile_routines:断言`ci-> oper [0] .value!= DYN_HASPARENT'失败的。 -------------------------------------------------- ------以下三个程序在为Aa机进行编译时会使编译器崩溃,但在Z机上可以正常工作:(程序入口点)(#a = $ X)错误消息:backend_aa.c:752: encode_dest:断言“ 0'失败的。 -------------------------------------------------- ------注意:我无法进一步最小化该程序,因为删除任何行都将导致崩溃消失。 (程序入口点)($ x = 3)($ y = 3)($ = $)([#a #b] = [#a #b])([#a #b] = [#b #a ])([1 [@a] 3] = [1 [@a] 3])([1 [@a #b] 3] = [2 [@a #b] 3])([1 [@a #b] 3] = [1 [@a #b] 3])([1 2 3 4] = [$ a $ b $ c $ d])错误消息:backend_aa.c:3151:opersize:断言`aao .value< = 0x3f'失败的。 -------------------------------------------------- ------还有一个类似的程序,也要尽可能简化:(程序入口点)($ x = 3)($ y = 3)($ = $)([#a] = [])([ #a #b] = [#a #b])([#a #b] = [#b #a])([1 [#a #b] 3] = [1 [#a #b] 3] )([1 [#a #b] 3] = [2 [#a #b] 3])([1 [#a #b] 3] = [1 [#a #b] 3])([1 [#a #b] 3] = [1 [#a] 3])错误消息:backend_aa.c:3151:opersize:断言`aao.value< = 0x3f'失败的。

谢谢!我会调查这些。前两个是我没有想到的极端情况;它们应该易于修复。后两种情况的发生是因为编译器用尽了用于保存临时值的寄存器。解决此问题涉及我一直在推迟的更大量的实现工作。但是,这当然需要完成。

链接到源存储库以接受补丁的任何机会。我在可以修复的文档中找到了一些建议。

为此有一个GitHub项目吗?我注意到我要为其提交PR的几个微小的文档错误。另外,这里的轨迹是什么:您知道功能完整吗?看起来怎么样,那里的旅程看起来如何?我已经涉足IF已有一段时间了;作为编码员(我在Clojure工作),我更喜欢Dialog语法而不是Inform(与Inform7一样漂亮)。您的论坛也被打破了;数据库错误,无法注册。 HLS

为此有一个GitHub项目吗?我注意到我要为其提交PR的几个微小的文档错误。

在Todo列表中' s。我自己的回购与系列的发展交织在一起,所以我必须创建一个新的公共回购,并在干净的历史记录。此外,这里的轨迹'你知道什么"功能完成"看起来,什么样的旅程看起来像?

没有详细的长期计划,但我认为大部分功能已经到位了。 Å-machine需要根据承诺的复古硬件运行,我常用于此。我对新的铃声和吹口哨有一些想法,但核心对话语言感觉相当稳定,并且可能以前后兼容的方式发展。但我不承诺这一点,直到我们到达版本1,这可能会发生(如果)人们开始释放在对话中制作的东西。呵呵,我哈文'它能够重现这个。它仍然从你的末端打破了吗?

感谢更新。我今天能够在论坛上注册,所以无论它是什么,都解决了。

所以,逃离哈布里斯的丰富,我试图将线程对话带到对话框,尽管:-TC在Inform7中没有足够的经验 - 没有完全流利的Inform7 - 对话 - 新的对话 - 非常有限的时间 - 非常有限的时间!!我挣扎着挣扎着。 Quips是TC中的基本问题 - 它们代表了玩家和NPC之间的交换,包括治理谁可以说Quip的谓词,以及如何直接或间接地互相遵循(加上TC更多的Quifs)。所以一个玩家命令可能会询问传言的竞争,这应该被理解为[讨论#是否与#barmaid真正讲述。但是我的代码,就像它所说,失败:>问酒吧女仆关于谣言谣言是否告诉真正的isn' t这里。所以它的一个范围问题。令我困惑的是,当追踪时,它看起来像它找到它:| | | | |找到(理解[询问酒吧女仆谣言]作为[讨论#rumors-thel-truce-stural #barmaid])/usr/local/share/dialog-if/stdlib.dg:4710(我viden' t进来任何代码以任何方式限制Quips,即很快就会限制Quips),但随后对话框继续存在:| | | | | | | | |进入(解析[栏长]作为对象[1] [13] [1] 0)/usr/local/share/dialog-if/stdlib.dg:4394 | | | | | | | | |查询(允许解析错误)/usr/local/share/dialog-if/stdlib.dg:4395 | | | | | | | |进入(将[MAID RUMORS]拆分到[MAID | $]和$)/usr/local/share/dialog-if/stdlib.dg:5273 | | | | | | | |查询*(将[谣言]拆分为$和$)/usr/local/share/dialog-if/stdlib.dg:5274 | | | | | | | | |输入(将[谣言]拆分为[谣言| $]和$)/usr/local/share/dialog-if/stdlib.dg:5273 | | | | | | | | |查询*(将[]拆分为$和$)/usr/local/share/dialog-if/stdlib.dg:5274 | | | | | |进入(理解[ark maid rumors]作为[ask $ the $])/usr/local/share/dialog-if/stdlib.dg:1916所以尽管找到了一个很好的匹配,但它似乎基于内置的徘徊在询问行动(?)。后来在痕迹中,感觉就像它'回到我的讨论行动,但是,即使是痕迹,它难以追随它)决定#谣言 - 判断真的是无法到达的。我尝试在范围内添加((Quip $))来制作范围的所有Quips,但它似乎有助于帮助。到目前为止,我的代码(从Stdlib.dg堆放和猜测工作和实验):(将[ark | $ look]重写为[ask | $ tailwords](通过[tem]拆分为$ person和$ morewords)(附加$ person $ morewords $ tailwords)(理解[ask | $ text]作为[与$ persons]的[讨论$ quip])*(将$ temint拆分为$某人和$ quipwords)*(理解$某人作为单个对象$人员,最好是动画)*(理解$ Quipwords质疑Quip $ Quip)(理解$单词作为质疑Quip $ Quip)*(理解$单词作为Quip $ Quip)(质疑Quip $ Quip)(理解$单词作为Quip $ Quip)(过滤器$单词进入$ filtered)(nonempty $ filtered)(确定对象$ quip)*(quip $ quip)%% todo:在​​对话的范围内......(来自单词)*(dict $ quip)(匹配$ zhip)(匹配$ zhip)所以我以为我&#39检查我是否甚至在正确的方向上朝着正确的方向前进。对于管理范围的TC非常重要; TC是关于揭示您在当前对话的当前点谈论的平衡,而不会赠送Don' T(尚未)的其他可能的对话Quips。最终,对话是否应该识别'谣言'由于引用Quip取决于玩家正在与谁交往,已经执行了哪些Quips,以及潜在的Quip是否遵循(DirectL

......