端点市 端点市
端点星,离银河中心最远的星。
关注数: 73 粉丝数: 193 发帖数: 1,848 关注贴吧数: 50
查询的评估与优化 读完了《逻辑编程导论》,这本书比较偏向理论,定义了很多概念。感觉书中的安全性、分析、优化等内容,读了后有一些收获。想对其中的一些内容做一些笔记,写写我的想法。书中所用的语言是Epilog,我转写成Prolog吧。 先说说查询的评估与优化吧。 原书相关章节: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Flogicprogramming.stanford.edu%2Fnotes%2Fchapter_05.html&urlrefer=3ac1ec91a347f7dc4132eaedcfc60cbd http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Flogicprogramming.stanford.edu%2Fnotes%2Fchapter_06.html&urlrefer=4fef2563b7dfc64813900928e7a0aecc 评估 感觉书中所说的评估算法有点像大O表示法,它们都不在意数据的具体规模,通常也都考虑的是最坏的情况。当数据量越大、越极端,好的算法的优势会更明显。当然,在实际情况中,数据量通常是有限的,也有自身特点,理论上的好的算法,实际效率未必比普通的高。要根据实际情况选择合适的算法。 这是书中的第1个例子: goal(a, c) :- p(a, Y), p(Y, c). 书中对此所做的分析:“我们假设一个标准的从左到右的查询实现,不对数据集进行索引,并且在计算结果之后不对结果进行缓存。……在最坏的情况下,数据库中有n^2个事实,其中n是我们语言中的基本术语的数量。因此,我们需要n^2个步骤来评估第一个合取项。最多有n个事实以a作为第一个参数。对于每一个,我们研究第二个合取项的n种可能性。计算实例的成本如下……n^2 + n * n^2 = n^2 + n^3” 书中的文字比较拗口,一些细节也有些含糊。我的感觉是,所查询的只有p这一种谓词,这个谓词中只有2个元,假设每个元对应的数据都特别多,各有n种,那组合搭配后有n^2个情况。查询时,先对第1个规则p(a, Y)进行查询,得逐个查询n^2个事实,判断是否匹配规则。a是常量,Y是变量,查询完第1个规则后,最极端的情况下,以a为第1个参数,有n个事实能匹配得了Y。在这n种情况下,分别继续考查第2个规则,就得逐个查询n^2个事实,在这个阶段中,得查询n * n^2次。总共是n^2 + n^3次。 这种结果是不符合正常思维,因为书里已经提前说过,不进行索引和缓存。要是能进行索引,提前根据名称等属性组织好数据,就能像查词典一样,即使数据很多,也能很快找到,不用一个一个查询。要是能缓存、对语句提前进行分析,就更像正常人的做法。明明只有一种谓词,干嘛还分两个阶段查询,查询每个事实时,如果符合第1个规则,再用第2个规则判断那个事实,如果都符合要求,就记录结果,那只需查询n^2次。 这是书中的第2个例子: goal(X, Z) :- p(X, Y), p(Y, Z). 成本为:n^2 + n^2 * n^2 = n^2 + n^4 类似第1个例子,所查询的只有一种2元谓词p,最多有n^2个事实。查询完第1个规则,结果是X与Y的组合,最多有n^2个结果。对于每个结果,分别继续考查第2个规则。 然后以书中的一道习题作为例子: goal(X, Y):- p(X, Y), q(Y), q(Z). 同样是写出其评估算法的表达式。答案是:2n^4 + 2n^3 + n^2 + n。 感觉这个与上面的例子不同的是,这个查询中有2种谓词,2元谓词p和1元谓词q,最坏情况下有n^2 + n个事实。对这3个规则依次查询,成本分别为n^2 + n、n^2(n^2 + n)、n^2(n^2 + n),加到一起为2n^4 + 2n^3 + n^2 + n。 优化 子目标排序 以这个查询为例: goal(X, Y) :- p(X), r(X, Y), q(X). 查询对象有3种谓词,数据库有n^2 + 2n个事实。对这3个规则依次进行查询,成本分别为n^2 + 2n、n(n^2 + 2n)、n^2(n^2 + 2n)。加到一起为n^4 + 3n^3 + 3n^2。 实际上,条件q应置于条件r前。如下所示: goal(X, Y) :- p(X), q(X), r(X, Y). 而此时,虽然同样共有n^2 + 2n个事实,但对这3个规则依次进行查询,成本分别为n^2 + 2n、n(n^2 + 2n)、n(n^2 + 2n),加到一起为2n^3 + 5n^2 + 2n。 同大O表示法类似,第一个查询的最坏情况是n^4,而第二个只有n^3。 此外,书中还表示:“在存在索引的情况下,两种排序的渐近复杂度是相同的。然而,第二次排序的低阶项表明它仍然是更好的排序。此外,可以证明,在所有可能的数据库上取平均值,第二个查询比第一个更好。” 感觉进行这种优化的思路是,尽量让许多可能性产生之前排除它们。当看到书中的经过优化的密码算术代码,一下子想起之前看过一些Prolog代码,看起来也像阶梯一般,当时不理解为什么要这么写,而不是写得整齐一些,将相同谓词的代码放到一块儿?因为要先尽量约束少量变量,减少可能性,再查询其他变量。因此,越到下面,变量越多,变量之间纠缠程度越高,语句也就越长,像阶梯一样。 此外,感觉这样的优化方式,也想起了在学C语言时,书中提到过,出于性能考虑,在编写多重循环时,如果可行,最好将循环次数少的放在外层,多的放在内层。都是一层一层,越到里面变量、可能性越多。有点异曲同工之妙。 子目标移除 效率低下的另一个常见原因是查询中存在冗余的子目标。 以这个查询为例: goal(X, Y) :- p(X), q(Y), q(Z). 在这里,q(Z)是多余的。如果变量Y的值能使q(Y)为真,那Z为同样的值,也能使q(Z)为真。完全可以删除q(Z)这个子目标。 很容易检查某些冗余子目标。如果某些变量只出现过一次,很有可能就是冗余(如果是出于不关注变量具体的值的目的,可以用空变量_代替它)。一些编辑器、解释器也能自动检测这种情况,并给出警告。 但这个方法不完备。当多余子目标共享会阻止该方法检测冗余变量。比如: goal(X, Y) :- p(X, Y), q(X, Y), p(X, Z), q(X, Z). 检测这种冗余会更麻烦,花费也会更多。 规则移除 以这个代码为例: goal(X) :- p(X, b), q(b), r(Z).goal(X) :- p(X, Y), q(Y) 由第一个规则产生的任何答案,也会由第二个规则产生,因此第一个规则是多余的。
《阿西莫夫科幻短篇全集1》到了! 期待已久的《阿西莫夫科幻短篇全集1》终于到了。 全集有好几卷,第1卷还分了两册……感觉翻阅、整理起来还得留意。应该能出版厚厚的一大本书吧?之前又不是没见过读客出版的一些厚厚一大本的长篇小说。有点好奇英文原著是怎么装订的,英文信息密度相比中文要低一些,故事内容、排版格式相同的情况下,英文的书通常会更厚些,难道它也分册?剩下的方面感觉都还可以。看了下阿老致读者的话以及书的版权页,美国那边之前有出版社整理过阿老的作品,这本应该是从那本合集翻译过来的。之前还有点担心这套合集会不会只收录短篇,一些中篇就被遗漏了,不过看阿老说的话,是让收录中篇了的。阿老说:“我的故事一般都比较理智,但它倒是能让你流下一两滴眼泪。”阿西莫夫的一些短篇作品里确实有种温情让人念念不忘,《小机》《双百人》《低能儿收容所》……阿西莫夫提到了他对便携式计算机的预见,不禁让人感慨时代的变迁,现在已经到处都有智能手机、平板电脑等便捷式计算机设备了。打开目录,看到了一些熟悉的作品,仿佛碰到了老友;也看到了不少没看过的作品,非常期待阅读它们了。很感谢出版社将这些作品引进国内。还送了一个“阿西莫夫宇宙指南”。
《巫师的城堡》——佐特宝珠与岩德护身符 《巫师的城堡》(The Wizard's Castle)是一款古老的地牢题材的角色扮演类游戏,玩家需要在地牢中寻找传说中的佐特宝珠。这款游戏恰恰与两款经典Roguelike游戏《地牢爬行:石头汤》(Dungeon Crawl: Stone Soup)和《NetHack》中的宝物佐特宝珠、岩德护身符都有一定关系。这里介绍一下它的历史和游戏机制。起因 在读陈灼的《上帝掷骰子:欧美角色扮演游戏史》时,看到80年代有个文字角色扮演游戏恰恰就叫《岩德护身符》,这引起了我的注意。不少Roguelike游戏的最终目标就是获得岩德护身符,当时怀疑这个游戏是否和《Rogue》有关联。但后来发现这款游戏其实是源于《巫师的城堡》,一款更早些的游戏。 《巫师的城堡》发布于1979年,比Rogue要早,但比第一款Roguelike(?)游戏《苹果园之下》(Beneath Apple Manor)要晚。历史 作者Joseph Power 《巫师的城堡》的作者是Joseph Power。 在1975年,Joseph Power还是密歇根州立大学的新生。有次他参加了芝加哥的风城(Windycon)科幻大会,会场上有一些连接到某所大学分时系统的终端,他在那里玩到了《星际迷航》(Star Trek)和与之相仿的《霍比特人》(Hobbit)游戏。而那些终端都是打印终端,不是CRT显示器。 那年夏天,有天他碰巧走到出售刚上市的TRS-80的Radio Shack附近,于是买了本关于TRS-80 Basic的书籍,学习编程知识,决定编写自己的游戏。 过了一段时间,在东兰辛市的一家名为“计算的新维度”(New Dimensions in Computing)电脑店开张了。因为作者和几个所有者是朋友,在没有顾客时,他得以使用Exidy Sorcerer电脑进行编程。游戏中的王国命名为“N'Dic”正是在向这家电脑店致敬。 这款游戏对当地的青少年造成了一定影响,有很多人爱玩这个游戏,也带动了店里的生意。 在代码将要完善的时候,《Kilobaud》杂志发布了一则公告,称寻求Exidy Sorcerer平台的程序。作者决定提交《巫师的城堡》,后来也成功签订了合同。但遗憾的是,几个月后,对方宣布全面退出Exidy Sorcerer市场,于是撤销了合同,商业化进程就此结束。 后来在1980年,作者在《recreational computing》杂志上发布了源代码。这个游戏又被移植到其他几个系统中。图形版开发者Derelict 这款游戏也同《Rogue》一样,后面有人为其增添了图形界面。图形版的开发者是Derell L.,但他更喜欢人们叫他的昵称Derelict。 Derelict从1982年到1986年,在加州州立理工大学读工程专业。1985年的时候,他的同学买了一台个人电脑,上面有《巫师的城堡》的Basic版的副本。Derelict很快就被这款游戏迷住了。 86年毕业后,他又去当地的一所初级学院上了Pascal课程。那是因为在Borland刚刚发布了35美元的Pascal集成开发软件后,游戏等其他软件出现了爆炸式增长。在Turbo Pascal之前,任何编译器起价都到了400美元。(关于这段历史,推荐一下李维的《Borland传奇》一书。)因此,Derelict尝试转化为Pascal。只是在互联网出现之前,并没有什么分发软件的好办法。后来过了好几年,作者才试着用C语言转写,并免费发布。 他说过,选择免费发布,主要有3点原因:管理共享软件需要大量工作,不想把太多精力投入到这不会返回大量资金的工作中;原始软件就是免费的,自己却为衍生版收费,像个恶劣的人;某种意义上,《巫师的城堡》也是很多Roguelike游戏的先驱,这类游戏传统上就是免费的,自己也玩过NetHack、Omega、Angband等Roguelike游戏,不想打破这个传统…… 而图形版所用的贴图,也和《NetHack》的贴图一个样子。😂《岩德护身符》 在1986年(也有资料显示为85年),Keypunch Software对《巫师的城堡》作了改动,并重命名为《岩德护身符》,将其纳入廉价游戏包《剑与魔法》(Swords and Sorcery)进行发售盈利。之所以命名为“岩德护身符”可能是为了掩人耳目,找了个题材相近的游戏中的素材作为名称。 这些改动是修复了一些错误,还为其添加了一些颜色和格式,但也引入了同样多的错误。很多文字都还没换成新的,像要获取的最终宝物是岩德宝珠,而不是标题中的“岩德护身符”。总之,这个为剽窃所做的改动很粗糙,游戏内容和原作基本一样。机制 感觉《巫师的城堡》的游戏机制介于更早的《魔域帝国》(Zork)和更晚的《Rogue》之间,既需要像前者那样输入单词指令进行游戏,也具有后者的随机环境、ASCII地图等要素。一些资料中说这款游戏是Roguelike,但它可能不是。 打开游戏后,首先要设定角色,可以设定种族、性别、分配属性点、购买装备。种族可选择精灵、矮人、人类或霍比特人。性别可以是男性或女性。属性有3种,力量、智力、敏捷。有8个属性点可由玩家自行分配。起始有60个金币,可用来购买防具、武器和光源。这座城堡有着随机生成的地形,而不是像《魔域帝国》那样,地图是固定的。但它的大小固定不变:总共有8层,每层有64个房间(格)。它的各个房间是独立的,每个房间只会有一种事件,敌人也不会从一个房间追击到另一个房间。它不像大多Roguelike那样,各个房间之间连接有走廊。 它的地图和《Rogue》一样是用ASCII显示的,但需要按地图指令M(ap)才能进行查看。这个操作不太方便,也不符合柏林诠释的“非模态”的定义。“非模态”要求游戏的战斗、商店等等的操作都应该在大地图的模式下发生,而不是切换界面。 战斗与属性点《苹果园之下》有几分类似,它们在战斗中都会损耗属性点。只是前者各个属性点都有可能被损耗(但通常是力量);而后者的战斗会损耗力量和体力值。《巫师的城堡》中没有血量,任何属性降到0,都会死。 除此之外,战斗方面也有其他特色。比如玩家可以选择贿赂有心智的怪物,从而回避战斗。店主也像后来的《NetHack》一样,是可以被杀的。 评价 Rymbeld:这不是一个客观的评价。我完全不合理地给了这款游戏五颗星。我给它五颗星,是因为这是我童年时期难忘的一部分……好吧,这不是一款伟大的游戏。它可能统治了它的时代,我当时很喜欢它,现在也仍然会怀旧地玩它。 匿名用户:这是我玩的第一个地牢探索游戏,当时我大约 13 岁……我初一时在Commodore PET上玩过。我认为是它吸引了我进入电脑游戏世界。:) Carl Muckenhoupt:一个原始的角色扮演游戏,场景是一个随机生成的8×8×8的地牢。它接收单个单词作为指令,但通常只用管首字母就够了。机制复古,有很多衍生版(大多还没收录到档案中)。如果说《猎杀旺普》(Hunt the Wumpus)是文字冒险游戏的前身,那么这个游戏就是Roguelike游戏的前身。 参考资料 The Wizard's Castle - Moby Games:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.mobygames.com%2Fgame%2F7387%2Fthe-wizards-castle%2F&urlrefer=3a50840b6c627a38e647aa610749f81b Rogue - Moby Games:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.mobygames.com%2Fgame%2F1743%2Frogue%2F&urlrefer=d2af0e304e0dbe82234c54af11bee02e The Wizard's Castle - TheAlmightyGuru:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.thealmightyguru.com%2FWiki%2Findex.php%3Ftitle%3DThe_Wizard%2527s_Castle&urlrefer=12118f744a79678e094f437742c81c64 Swords and Sorcery - TheAlmightyGuru:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.thealmightyguru.com%2FWiki%2Findex.php%3Ftitle%3DSwords_and_Sorcery&urlrefer=e54f1dce8cd249d9120906d18f5c6da5 Game 90: The Wizard's Castle (1980):http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fcrpgaddict.blogspot.com%2F2013%2F02%2Fgame-90-wizards-castle-1980.html&urlrefer=5bea463c6c2b55228bfccb969f96bac4 【CRPG BOOK翻译】《苹果园之下(Beneath Apple Manor)》:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.gcores.com%2Farticles%2F117375&urlrefer=9c5bf6e59805ba89da5328a63d4f238c The Wizard's Castle - Details:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fifdb.org%2Fviewgame%3Fid%3D5ee3nxfcwzzb9w1d&urlrefer=03c1f5264c196c2ad80f9cc630bda3c8 The Story of The Wizard's Castle:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fweb.archive.org%2Fweb%2F20150412231137%2Fhttp%3A%2F%2Fwww.armchairarcade.com%2Fneo%2Fnode%2F1381&urlrefer=787e7af1e16a9b81ad49a93a75ad5050 The Wizard's Castle的Windows版:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fderelllicht.com%2Fwinwiz.html&urlrefer=fc0f32cac6cab69072b6d8952b605a95
Prolog吧导航 因原导航帖(https://tieba.baidu.com/p/3163415018)中的链接已经失效,决定重开一个导航帖。希望这个帖子能有所帮助。 各精品区职能 教程与资料:Prolog的教程和相关资源。 资讯与花絮:Prolog的的重要新闻和逸闻趣事。 问题与解答:收录已经作出准确回答的帖子。 吧友原创:吧友原创的相关作品,程序、工具、艺术创作。 吧务:吧务相关。 官网 目前比较流行的是SWI-Prolog和Visual Prolog。SWI-Prolog官网比较好,上面能查到预设的谓词的用法。 SWI-Prolog官网:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.swi-prolog.org%2F&urlrefer=9cc9beb9526272804a2cc120c6d89091 Visual Prolog官网:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.visual-prolog.com%2F&urlrefer=07f634f48aa40915adc5361d580f59b6 在线编程 SWISH:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fswish.swi-prolog.org%2F&urlrefer=2bcd2b7819787d21c409d0d61c6568b6 WASM:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fdev.swi-prolog.org%2Fwasm%2Fshell&urlrefer=72acbc6ca1844da90fd1b215ac0da2b7 教程 Visual Prolog官网上部分教程的中文译文:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwiki.visual-prolog.com%2Findex.php%3Ftitle%3DCategory%3ATutorials%25E9%2583%25A8%25E5%2588%2586%25E4%25B8%25AD%25E6%2596%2587%25E8%25AF%2591%25E6%2596%2587&urlrefer=a8ebc0ca0cdf98d8ff16d523d0eac752 【教程】Prolog和人工智能:https://tieba.baidu.com/p/5800468394 Prolog入门教程系列:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.cnblogs.com%2Fzhangoke%2Fp%2F9510122.html&urlrefer=b18420956df66e91040ddea9d4f6721e 书籍推荐 我之前是看的《七周七语言》和《用Prolog和Turbo Prolog语言开发专家系统》入的门。二三十年前是有一些Prolog相关的中文书籍,但当下应该没有太多专门讲它的中文新书。 英文书籍,按照《The Craft of Prolog》(https://tieba.baidu.com/p/7485300924)所建议的,学习Prolog,第一本书推荐用《Logic for Problem Solving》《Programming In Prolog》(https://tieba.baidu.com/p/7964297542)或《Prolog: A Relational Language and Its Applications》;第二本书推荐用《The art of Prolog》《Advanced Prolog: Techniques and Examples》;第三本书就是《The Craft of Prolog》了。
DCSS设置中文及0.30版的汉化更新内容 我是《地牢爬行:石头汤》0.30版的汉化者,0.30版在汉化方面有不少更新。在这里说一下设置中文的方法、汉化更新内容、汉化历程,同时向帮助过翻译工作的人致以谢意。 这个版本等待了很长时间了,不过确实有很多更新内容。在更新公告中(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fcrawl.develz.org%2Fwordpress%2Ftrunk-updates-11-jan-2023&urlrefer=5f45610b3e53746b52e9ac1d8e23be80),很高兴见到翻译工作得到了见证。希望翻译工作能让玩家更好地体验游戏乐趣,希望能让更多玩家体验到这个游戏的快乐。 原本打算等正式发布后写这些内容,但感觉它后面可能还要一些时间进行更新,觉得不如让大家先体验一下游戏,同时看看翻译中有没有什么错别字、语意、术语不一致的问题,相应文件后面官方如有更新,我会在更新对应的中文文件时,一并进行修正。设置方法 设置方法我之前在百度经验(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fjingyan.baidu.com%2Farticle%2F1e5468f9cc9a22094861b737.html&urlrefer=7413dd9f172f4e133dde361aff2c38ad)上也写过。 网页版 这里以crawl.akrasiac.org为例。打开并登录后,会列出各个版本,这里选择Trunk版(此时为0.30版),点击其右边的(edit rc)编辑其配置文件。加入一行“language = zh”,设置中文,并点击“Save”进行保存。如果能克服延迟等问题,很推荐网页版,因为可以省去配置字体的步骤。而且在网页版中,右键怪物或魔法书弹出其描述页面,上面可能有能力、法术的贴图,再右键这些贴图,就能看到相关描述文字。但目前本地贴图版的怪物或魔法书的描述文字界面中,只能用快捷键查看其能力、法术描述文字,不如前者接着用鼠标更为自然。电脑版 需要先找到配置文件。如果是Windows系统,配置文件是“init.txt”,它在游戏目录下的“settings”文件夹中;如果是Linux系统,也可以在家目录创建一个名为“.crawlrc”的纯文本文件。 编辑配置文件,加入一行“language = zh”,设定中文。 如果是贴图版,还需要配置合适的字体,才能显示出汉字,这里推荐文泉驿正黑字体。然后需要配置tile_font_crt_file、tile_font_msg_file、tile_font_tip_file和tile_font_lbl_file这几个选项,这几个选项对应的场合,会出现中文。它们后面需要接字体文件的绝对路径,也可以将字体文件存到游戏文件夹中的/dat/tiles中,那么后面只需要写字体文件本身的文件名即可。示例:tile_font_crt_file = /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc安卓版 安卓版也可以设置中文。它的设置方法与前面所述的本地贴图版的设置方法比较类似。 首先在游戏目录(我这边的路径为 /storage/emulated/0/Android/data/org.develz.crawl/ )的“files”文件夹下新建名为“settings”的文件夹,再准备合适的字体文件。 进入“settings”目录,新建一个名为“init.txt”的纯文本文件,同样在其中编写设置语言、设置所用字体文件路径的配置语句。汉化更新内容 在游戏目录中的/dat/descript下存放着怪物、物品、魔法、能力、神、地形、种族等项目的描述文字。鼠标右键或悬停在相应东西上,可以看到。也可以在进入游戏后,点击图标是放大镜的“查看帮助”按钮,就能看到各类项目的描述文字。 截止2023年2月1日,这些描述文字的所有条目均有中文翻译,且更新到了最新版。这个目录下的教程进行了更新。也就是说,这个目录下面,只剩quotes.txt和hints.txt还没进行补充、更新,这些后面再慢慢完善吧。 同时对/dat/database目录下的FAQ、帮助等文件进行了更新。 个人认为,其中最有用的可能是魔法、能力和神的描述文字。像物品、怪物、地形,看一下名字和贴图就大致能根据生活经验看出其特征。但前面很难看出具体的效果,而这些对游戏很重要。 汉化历程与致谢 大概是10年前,DCSS官方在Transifex网站上创建过翻译项目(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.transifex.net%2Fprojects%2Fp%2Fdcss%2F&urlrefer=3734bfc96a0edefd9c5130c92f9f4e2e)。Transifex这个网站确实不错,界面很清爽,像开源天文馆软件Stellarium至今仍在用它组织翻译项目,我之前提交过几个翻译。但现在那个DCSS翻译项目已经没了,链接也打不开,因此无法得知贡献者的名字。感谢各位的工作,如果没有这些,可能就一直没有这个游戏的汉化了。 2019前,看到游戏中有中文,于是我萌生了继续汉化的想法。当然,DCSS文本量很大,翻译会面临很多挑战。可能一时想不起来某个术语之前已经译好过,却给新的文字译了别的名称;可能不同人有不同翻译,却没进行统一。 Zijingng大佬在网上看到这个想法后,在Paratranz网站上创建了并组织了翻译项目(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fparatranz.cn%2Fprojects%2F808%2F&urlrefer=f67819d4c101903d1103ab4f3b7f072a)。当时是基于0.24版进行翻译。怀念那段时光。感谢各位的贡献和精彩的翻译!2021年时,我整理出几个文件,并提交给官方。最开始我只是觉得不管是缺失部分内容还是陈旧,有东西反正是比没有强。结果对方找出了一堆和当下版本的出入,并删去了有问题的地方,感觉是挺负责的。本来还以为对方不懂中文,也不太在乎这种事。我在汉化文件中以注释的形式加入了汉化项目链接,但后来被官方删除了。 我于是决定尽可能做好前面的工作,使表述更一致,并更新到最新版,这么做也会有助于后面想要继续维护的人。DCSS更新频率比较快,每次更新的内容不少。如果能把某个文件完全译完,后面它即使有更新,也能用对照工具找出之间差异,进行相应修改,就不用一条一条地过了。维护成本就能降低。 我先翻译的是物品的描述文字,因为感觉这里面的条目可能被调用得最频繁,先把这些确定下来再说。这些名词的翻译,参照了陆谷孙编著的《英汉大词典》。这个词典很好,一些很生僻的词也能找到专业的解释。比如“raja”,给出的翻译是“罗阇”,准确、古典。这本词典后面也给了很多帮助,减少了很多纠结的过程。在2022年算是手动地完成了这个文件,并提交上去。这次官方大为赞赏。 如果只是手动地这么翻译,还是难以解决词汇、表述不统一的问题。幸运地是,后面发现了OmegaT这款开源辅助翻译软件。它具有词汇表、模糊匹配等功能,而且功能很强大、灵活。后面我就用这个软件进行工作,大大提升了效率和准确性。也非常感谢OmegaT的开发者以及汉化者。我同时将各类物品的名称整理到了这个表中(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.kdocs.cn%2Fl%2FcguFL1IpWt6U&urlrefer=bb02247d7c980451115959cfaf592253)。等正式发布后,会将OmegaT翻译项目工程文件发布出来。 祝大家玩得愉快!
阿西莫夫的《宇宙秘密》 这本书算是阿西莫夫的随笔集了,收录着阿西莫夫对科学、宗教、社会等方面的看法,里面当然也有很多科普。每篇的内容都很充实,旁征博引而饶有趣味,值得阅读。6年前读过这本书,其中有3篇至今仍印象深刻。令我印象最深刻的是《庞培与命运》。作者在这篇文章中花了大量篇幅讲述了庞培一生的经历。庞培前半段顺风顺水,堪称传奇;而在遭遇某件事后,却又急转直下,接连失败。而所谓让庞培不断遭遇厄运的事就是,他闯入了犹太人的圣殿中的密室,犹太人确信他会遭到神的毁灭。让阿西莫夫援引这个故事的目的恰恰是说明,有些古怪的事情,它的因果并不是什么心灵感应、神灵之类的缘由,“只是偶然的巧合,不应以此为借口去寻找某种神秘的、愚蠢的因果关系。“除了阿西莫夫的观点,这个故事中的一些片段本身也很有趣味,很有教训。”庞培春风得意后,“却鬼使神差地解散了军队,自信自己已经达到了这样的程度:单凭自己名字的魔力,就能掌握整个共和国。”庞培请求元老院为他手下的士兵分配土地,然而却被驳回了。觉得庞培过于追求浮名,却丢掉了实质,我觉得如果真想为士兵争取权益,卸任前不是更有把握处理妥当。况且庞培早已对元老院的威信构成威胁了,他们不可能还姑息下去的。解除兵权后,是元老院的人掌握着评判的话语权,那个请愿再怎么合情合理,他们也有驳回的借口。庞培已经丢了反驳、威胁对方的能力。后面凯撒当了执政官,渐渐掌控了大权,迫使元老院批准了庞培的为其士兵分配土地请求。但这实际上更像是让庞培蒙羞,庞培只得乞求元老院,而凯撒却能“优雅大度”地施舍给他。凯撒确实比庞培和元老院的人更具有领导才能。 还有《勒克桑墙》中对快子性质的一些推测,很迷人。根据相对论和洛伦兹公式,会得出物体越接近光速,运动质量就越大,同时越难再进行加速。但这只是速度低于光速的情况。如果把速度设定为超越光速,一些有趣的东西就出现了。质量首先会变成虚数。继续推导下去,在这个世界,任何东西的运动速度都超过光速,而接近光速同样会越来越难。阿西莫夫描述了按这个规则推导的那个世界的一些物理状况。阿西莫夫的另一本科普作品《你知道吗——现代科学中的一百个问题》的第52篇《能量为零的快子会以无限大的速度运动,这样说来,确实有可能实现无限大的速度罗?》还提出了这个由快子构成的宇宙中可能会出现的一些荒唐的事情。在这个宇宙中,当粒子获得的能量越来越多时,它的速度越来越慢;失去的能量越来越多时,它的速度越来越快。到它们的能量等于零的时候,它们的运动速度就达到无限大。但问题是假定有两个能量正好相同的快子非常准确地发生对头碰撞。这时,它们的动能难道不会正好互相抵消掉,从而使两者以真正无限大的速度离开碰撞地点而飞开吗?出现无限大的东西,这就很有可能是个谬论。 在《错误的相对性》一篇中,阿西莫夫明确了态度:“首先,让我们摒弃苏格拉底的论调,即知道自己什么都不懂才是聪明的标志,因为我对这种”装腔作势感到厌烦、恶心。没有人什么都不懂。“苏格拉底总是会说自己一无所知,诱使他人详细阐明他们在抽象概念上的观点,然后用一系列貌似无知的问题,迫使他们陷入自相矛盾的混乱境地。但这有时更多只是一种话术,把姿态放低,别人进行攻击时会索然无味。梁实秋的《骂人是一门高深的学问》中写过这类套路:“即使自己没有理屈的地方,也绝不可自行夸张,务必要谦逊不遑,把自己的位置降到一个不可再降的位置,然后骂起人来,自有一种公正光明的态度。”佯装自己一无所知,在舌战时很好使,毕竟摧毁通常是比建设容易,挑别人毛病比维护自己观点更容易。但总是持这种“一无所知”的态度往往建设不出实事。约翰·坎贝尔对阿西莫夫说,一切理论迟早都会被证明是错误的。而阿西莫夫则表示,错误是有程度的。像地球是平面是错的,地球是球体也是错的,但如果认为两者的错误程度完全相同,那么错误程度比那两种加起来还严重。如果都一概地认为我们对世界一无所知,什么想法都有问题,那很难指导生产活动。 这本书曾收录在上海科技教育出版社12年开始出版的阿西莫夫书系中,希望这套丛书有机会能够再版,要是能进行电子化,那就更棒了,方便索引和携带。而《宇宙秘密》这本书近些年倒是有再版,同样是上海科技教育出版社,在20年出版了哲人石丛书,它被收录其中。这套丛书主要包含科普、传记、科学史等科学文化著作,共有20本,其中3本是阿西莫夫的作品:《亚原子世界探秘》《人生舞台》《宇宙秘密》。阿瑟·克拉曾克承认阿西莫夫是世界上最好的科普作家,确实所言不虚。
使用Prolog实现一些排序 有时,我们需要将列表中的元素进行排序。SWI-Prolog内置了sort/2谓词用于排序,它用的是自然归并排序算法(natural merge sort),但那个谓词并不是用Prolog编写的,而是用的C,可能是出于运行效率的考虑。 在这里将展示4种Prolog的排序程序:朴素排序、插入排序、冒泡排序、快速排序。我们首先用“<”“@<”等符号设定排列次序,如设定语句order(X, Y) :- X < Y.进行升序排列。朴素排序 朴素排序(naive sort),首先生成对象的排列,然后测试生成的列表是否按升序排列,如果它们不满足条件,那么我们再生成对象的其他排列,进行测试,直到符合要求。这显然不是一种高效的排序方法。 naisort(L1, L2) :- permutation(L1, L2), sorted(L2), !. permutation([], []). permutation(L, [H|T]) :- append(V, [H|U], L), append(V, U, W), permutation(W, T). sorted([]). sorted([_]). sorted([X, Y|L]) :- order(X, Y), sorted([Y|L]). 插入排序 插入排序(insertion sort),每次排序时取未排序的一项,将其插入到已排序列表中的适当位置。下面的代码中,当列表Y是排好序的列表X,则insort(X, Y)目标成功。每个元素都从列表头部移出,并传递给insortx,insortx将元素插入到列表中并进行返回。 insort([], []). insort([X|L], M) :- insort(L, N), insortx(X, N, M). insortx(X, [A|L], [A|M]) :- order(A, X), !, insortx(X, L, M). insortx(X, L, [X|L]). 冒泡排序 冒泡排序(bubble sort)会检查列表,查看两个相邻元素是否顺序有误,如果是,则交换它们,这个过程不断重复,直到不需要再交换为止。插入排序使元素“下沉”到适当的级别,而冒泡排序之所以如此命名,是因为它使元素“浮动”到适当的级别。 busort(L, S) :- append(X, [A,B|Y], L), order(B, A), !, append(X, [B,A|Y], M), busort(M, S). busort(L, L). append([], L, L). append([H|T], L, [H|V]) :- append(T, L, V). 快速排序 正如名字所言,快速排序(Quicksort)是在实践中已知最快的排序算法。快速排序是一种更复杂的排序方法。其基本步骤是,如果列表中元素个数是0或1,则直接返回;接着选取列表中任一元素(这个元素在这里被称为“枢纽元”,pivot),将列表中的其余元素分为两个列表,其中一个列表中的元素都小于前面选取的那个元素,而另一个则都大于;然后对这两个列表重复执行上述步骤,得出结果,进行整合。 为了在Prolog中实现快速排序,我们可以将一个由头部H和尾部T组成的列表分成两个列表L和M,并使得: - L的所有元素都小于H; - M的所有元素都大于或等于H,并且 - L和M内元素的顺序与[H|T]中的相同。 split(H, [A|X], [A|Y], Z) :- order(A, H), split(H, X, Y, Z). split(H, [A|X], Y, [A|Z]) :- \+(order(A, H)), split(H, X, Y, Z). split(_, [], [], []). quisort([], []). quisort([H|T], S) :- split(H, T, A, B), quisort(A, A1), quisort(B, B1), append(A1, [H|B1], S). 参考资料 《Programming In Prolog》 《数据结构与算法分析——C语言描述》
日本的这个机器人也叫丹尼尔 昨天在水群时,看到群友发的图片,惊喜地看到日本也有个机器人名叫“机·丹尼尔”,它还会鲤鱼打挺。这个动作对较重的机械来说,确实不太容易,研发者厉害。刚看到截图时,还以为是新闻,看了下时间,才发现是在赛博考古。也感谢网站忠实地保存了那则消息(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnews.mydrivers.com%2F1%2F43%2F43718.htm&urlrefer=8dde4f3c93d6b78ccce7b7c33f3b6033 )。 这个机器人是由东京大学智能系统情报学研究室(http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.isi.imi.i.u-tokyo.ac.jp%2F%3Flang%3Dja&urlrefer=ee6743b7cd479587bc63cb8ae7dddd8f )的国吉康夫教授主导研制开发的。它的名字确实是源于阿西莫夫的小说中那个传奇的机器人(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.newscientist.com%2Farticle%2Fdn7875-rock-n-roll-robot-regains-its-feet%2F&urlrefer=eb33b305ad533a5eaef308050938754c )。 也许国吉康夫教授也是阿西莫夫的忠实粉丝。阿西莫夫的作品激励了一代又一代人。 只是现在的人工智能在不少地方不如小说中的那般通用、灵活。有些事,对人类来说很麻烦,但对电脑来说很容易,有些事则恰恰相反。即使是小学文凭的保姆,也能胜任扫地、做饭、洗衣等家务。但像做饭,对现在机器来说挺麻烦的,更不要说让台机器负责这所有家务了。人工智能可能还有很长的路要走。
埃隆·马斯克:文明的发展存在周期性 特斯拉CEO埃隆·马斯克热爱科幻小说,而且他最喜欢的正是阿西莫夫的《基地》。他还曾将《基地》送到太空中。埃隆·马斯克在一次采访(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.businessinsider.com%2Felon-musk-favorite-book-foundation-asimov-2014-12&urlrefer=32e4d93c1356f2dcd18b349467e1cedf)中说:“历史经验表明,文明的发展存在周期性。你可以上溯到很远:巴比伦、苏美尔、埃及、罗马、中国。目前我们很明显处于上升周期中,并期待继续保持这样的发展。但情况可能并非如此。一系列事件可能会导致技术水平的下降。45亿年以来,这是地球生命首次有可能离开地球的束缚,因此当窗口打开时,我们应当采取聪明的做法,而不是期待窗口会长时间打开。” 马斯克表示, 《基地》让我明白,任何事业,任何文明迟早都会崩溃,哪怕我们尽了最大努力。 这是几千年前都有人明白的道理。曹丕就曾说过:“自古及今,未有不亡之国也”。虽然这句话出自《吕氏春秋》,但偏偏又从一个开国帝王口里说出来,真的让人觉得诧异。然而很多帝王却以为自己的帝国能传承万世。地球都有寿命,太阳都有寿命,哪怕宇宙都有寿命,都有毁灭的时候。文明在它们面前真是微不足道,更不要说个人。唯有死神永生,唯有永恒的终结。 黑格尔则认为,人类的文明都是螺旋式上升。就地球上目前的历史来看,的确是有起有伏,但总体趋向上升。 但是,知道总体会上升,可能对个体来说意义不大。即使大多数人会更好,不代表自己人同样会更好。在历史的长河中,有的是民族、文明灭亡了。《永恒的终结》中,永恒时空“为人类带来最大多数的幸福”,但自然总会有人倒霉,不可能尽善尽美。这里,我可能有点理解一些规划者的难处了,怎样才能用最小的阵痛实现目标,总有人会受损,总有人会得利。这时,影响的可是成千上万个真实的一生。 并且,这只是“螺旋式”上升。可能有的时候,一个人一生几十年的时光都是在历史的低谷中,一眼望不到头。最后回升的历史也对他意义不大。他们挣脱不了这低潮的时代,也享受不到回升后的任何东西。 最后,是个东西迟早都会毁灭的,不可能永远上升下去。即使是人类整体,也总有衰退、消亡的一天。永恒时空的人自以为规划得很好,尽管其中起起落落,但终究给大多数人带来福祉。但是永恒时空的人再怎么计算,总有掌控之外的信息没能纳入考量。“为了消除现实中的灾难,反倒消除了达成胜利的可能性。”一个人的寿命也就几十年罢了,人类整体总有消亡的一天,他们这么规划是为了延续得更长,为了大多数人的幸福?意义何在?宇宙都有热寂的时候,总不至于有魔征人为了宇宙整体的延续,号召大家减缓能量的流动吧。 生活中谋划得太长远,可能没多大意思。如前面所说,因为不可能掌握所有信息,世界未必按你预想的来。其次是别人未必听从你的。永恒时空的人是暗中操作,尚不至于被找上门来进行报复。而阿西莫夫的短篇《可避免的冲突》,人类在用超级计算机规划生产指标,谋求总体利益,但实际上各地区已经有各自的诉求,规划得再好,就不听从。这些机器同样迟早要完。能把自己一生这几十年谋划好,已经极为厉害了。“此后亦非而所知也”。
NetHack中的物品材质 补充一下资料吧。因为3.7版将会推出,担心这时候写的东西,不久就会过时。这些基本是根据NetHack Wiki整理的,但Wiki上一些页面似乎也过时了。 NetHack中每个物品都具有一种材质,有时这会带来了一些奇妙的属性。总共有22种材质:未定义、液体、蜡、素食、肉、纸、布、皮革、木、骨、龙皮、铁、金属、铜、银、金、白金、秘银、塑料、玻璃、宝石、石。 未定义、液体、蜡、素食、肉、纸、布、皮革材质的物品、橡胶管是 柔软的。即使是有角的怪物,也能䵧上柔软的帽子。 未定义、液体、蜡、素食、肉、纸、布、皮革、木材质的物品是 有机的,黏胶立方怪可以吃有机的物品。有机材质的武器和防具能被 腐烂。需要注意的是,骨和龙皮是无机的。 未定义、蜡、素食、肉、纸、布、皮革、木、塑料材质的物品是 可燃的。 金、银、铜、铁、白金、秘银和其他金属是 金属类的。 锈怪可以吃 铁质物品, 岩石鼹鼠和 索尔石怪可以吃 金属类物品。食用某些戒指和护身符有几率获得相应内在属性,但变成肉的则不行。铁会生锈,铁和铜会生锈、腐蚀。 宝石和石材质的物品的性质很相像,能被 点石成肉。 未定义 只有 蠕虫齿的材质是未定义的(在3.7版中它的材质变为 骨)。 液体 只有 毒液的材质是液体。 药水却 不是,它是 玻璃。(“我能吞下玻璃而不伤身体?”) 蜡 只有蜡烛(包括牛油烛)的材质是蜡。 素食 主要是一些食品。吃这些材质的食品不会打破素食成就,但吃其中一些物品,煎饼、幸运饼干、奶油派、条形糖果和蜂王浆会打破严格素食成就,因为这些有动物制品的成分。 肉 材质是肉的物品有:大多数尸体、牛肚、蛋、肉丸、肉棍、大块肉、肉环。食用任何肉类食品会打破严格素食成就,食用除 蛋以外其他肉类会打破素食成就。 纸 所有卷轴和书都是纸质的。纸质的东西是 可燃的,除了死亡之书(博人传?)。 布 布制的物品能被 烧焦、腐烂。布制的物品有:帽子(巫师帽、愚人帽、软呢帽)、所有衬衫、除皮斗篷以外所有斗篷、一些工具(所有类型的袋子、眼罩、毛巾)。 皮革 皮革质的物品能被 烧焦、腐烂。皮革质的物品有:牛鞭、投石器、精灵皮帽、皮甲、嵌皮甲、皮夹克、皮斗篷、除力量手套以外所有手套、除铁鞋和踢靴以外所有靴子、鞍、狗链、鼓。 木 木质的物品能被 烧焦、腐烂。木质的物品有:精灵匕首、精灵短剑、精灵阔剑、精灵矛、精灵盾、精灵箭、所有类型的弓弩、棍棒、铁头木棒、回飞镖、小盾牌、笛、竖琴、箱子、大箱子、外观为“分叉”和各种木材的魔杖、外观为“木制”的戒指。 骨 外观为“象牙”(应该还有“珍珠”)的戒指和所有类型的角的材质是骨(在3.7版中 蠕虫齿的材质也是骨)。Wiki的“Bone”页面中,材质为骨的戒指只有象牙,但源码中,珍珠也算是骨质的。 龙皮 龙鳞和龙鳞甲的材质是龙皮。龙皮本身就是 定形的,也就是不会被锈蚀、烧焦、腐烂。龙皮是动物制品,如果吃下它会打破素食成就,但它却不是有机的,正常游戏中应该无法食用它。 铁 铁会 生锈、腐蚀。铁质的物品有很多。绝大多数护身符(除了岩德护身符和岩德护身符的廉价塑料仿制品)的材质是铁。一些戒指(外观为铁、扭曲的、钢铁、金属、订婚、闪耀的)、一些魔杖(外观为铁制、钢铁、六角形、短、长、符文、弧形、尖顶)的 材质为铁。用用试金石擦铁制品,如果发出 “咯喳,咯喳”("scritch, scritch")的声音。 锈怪能吃铁制物品,但无法吃其他类型的金属,可能是因为游戏中只有铁会生锈。 金属 金属就是材质为金属类的,但不是铁、秘银、白金、银或金这些金属。这类物品 不会锈蚀。金属物品有:矢(竹箭)、手术刀、哨、罐头、一些魔杖(外观为锡制、铱金、锌制、铝制和铀制)、武士剑。也就是说,穴居人的力量权杖会锈蚀(铁制),而武士的任务神器妖刀村正(本体为武士剑)不会锈蚀,不用做防锈蚀处理。 铜 铜会 腐蚀,但 不会生锈。在游戏中,铜质物品的名字中通常有“铜”“青铜”“黄铜”的字样,如青铜板甲。所有类型的灯、黄铜灯笼、军号、铃的材质为铜。外观为“铜”“青铜”“黄铜”的戒指、外观为“黄铜”“铜制”的魔杖的材质为铜。 银 银 不会锈蚀。用银质物品打击恶魔、吸血鬼、阴影、兽化生物能额外造成1~20的 银伤。厌银生物不会捡起银质武器和防具,但 可以拾取其他银制物品(不然一些怪物没法抢开启之铃了),如外观为银制的魔杖。银质物品有:开启之铃、银剑(神器有夜刃、兽化人之灾)、银箭、银匕首、银矛、反射之盾(抛光银盾)、外观为“银制”的魔杖、外观为“银”的戒指。银龙鳞和银龙鳞甲的材质不是银,而是龙皮。 金 金 不会锈蚀。金质的物品有:金币、祈祷烛台(正常游戏中只有这一个烛台)、外观为“金”的戒指。 白金 白金 不会锈蚀。材质为白金的物品只有外观为“白金”的魔杖。岩德至尊白金卡的材质不是白金,而是塑料,因为这个神器的本体为信用卡。 秘银 秘银不 会锈蚀。秘银质的物品有矮人秘银胶衣、精灵秘银胶衣、岩德护身符。秘银这种材料源于《魔戒》,具有重量轻的性质,秘银胶衣在前期是很不错的护甲。 塑料 塑料质的物品是 可燃的。塑料质的物品有:冰盒子、信用卡(神器有岩德至尊白金卡)、相机、魔笔、橡胶管。 玻璃 大多 玻璃制品易碎,在投掷或受到钝击时会破裂。但是,玻璃质的 神器和 玻璃不会这样碎裂。玻璃质的物品有:水晶板甲、镜子、水晶球(玻璃球,神器有命运之球、探测之球)、眼镜(神器有超世界之眼)、 药水、外观为 “玻璃”“水晶”的魔杖、各色毫无价值的玻璃。 宝石 所有宝石(不是毫无价值的玻璃)的材质是宝石。一些戒指(外观为玛瑙、黑玛瑙、钻石、祖母绿、翡翠、月石、红宝石、蓝宝石、虎眼石、黄宝石)的材质也是宝石。在Wiki中,戒指的月石和黑玛瑙算宝石,但在源代码中,它们似乎不算宝石? 石 材质为石的物品有:岩石、巨石、所有灰色的石头、外观为“大理石”的魔杖、外观为“花岗石”“蛋白石”“黏土”“珊瑚”“黑玛瑙”“月石”的戒指、雕像、小雕像、迅捷小刀。 另外,在不同版本中,在材质方面的表现,似乎会有些微差异。根据我和网友游戏时的经历,在3.6.0版中,钥匙是能生锈的,相关属性还会显示在物品栏中;鸡蛇尸体能够被烧焦,会有相关提示,但不会显示在物品栏中,而且,如果许愿的是“定形的鸡蛇尸体”,则不会再显示它被烧焦的提示语。但在3.6.1及后之后的版本,则没有这些效果,可能后面只有 武器和 防具才有烧焦、腐烂、锈蚀的设定。
技术与魔法——赛佛·哈定对四王国的控制 之前看过著名科幻作家特德·姜受采访时的文字(来源:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.zhihu.com%2Fquestion%2F392159663%2Fanswer%2F1728202636&urlrefer=ecba28712e2472b1b401c6de2ff4eb81 ,http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.douban.com%2Fnote%2F823329508&urlrefer=c4efccabb2c1270bd0469ca2e5e59ab6 ),里面有很多关于科学和魔法的区别的很精当的看法。特德·姜认为,魔法与科学的本质区别在于: 魔法的实施因人而异,科学则具有普适性。这个话题确实很适合让特德·姜进行讨论,他的作品中常常有神话、魔法的要素,如《巴比伦塔》《商人与炼金术士之门》,但读完后,却恰恰能感觉到其科幻内核,而且这甚至是最核心、最本质的。这是特德·姜的拿手好戏。在赞赏之余,这同时也让我联想起《基地》中,端点星第一位市长,智慧、果断的赛佛·哈定,在第二次危机中,偏偏选择利用宗教势力控制了周围四王国。“基地”系列固然是受了《罗马帝国衰亡史》的影响,这些故事是有罗马的影子。但我想,阿西莫夫这么安排,可能有更本质的原因,初生、弱小的基地,只有为自己赋魅,才能保存自身,不被强邻所吞没。 阿瑟·克拉克有句名言“在任何一项足够先进的技术和魔法之间,我们无法做出区分”。特德·姜同意这句话,但对此还有更多、更具体的看法:魔法的实施因人而异,有时候实施者只能是具有某种天赋的人,有时候是经过多年修炼,灵魂得到了净化的人,有时候是那些心存善意的人,或者说其效力取决于实施者的出发点是好还是坏。科学却不一样,比如,当你拿起一块磁铁,让它穿过一个线圈时,电流就产生了。我想,这可能与解数学题类似,有的同学很聪明,能快速得出答案,但他并非凭空得到这个答案,而是有一套解题的逻辑和次序,别人如果肯花时间特意投入到这个事上,照着那个步骤走,也能得到答案。但魔法则不然,耶稣能施展五饼二鱼,但别人再亦步亦趋地照着其方法做,大概率不会成功吧。在《基地》的故事背景中,帝国衰弱,各地区之间断了联系,科技也因无力维护,而随之衰退。众学者得到编纂百科全书这一光荣的敕令后,从帝国的中心川陀来到了遥远的边疆端点星。但实际上,他们所背负的使命远比编纂百科全书宏大得多:“文明不断衰退,核能已被遗忘,科学变质为神话──直到基地步入这个历史舞台。这个基地,正是哈里·谢顿为了那个长远的目标,而在端点星所建立的‘基地’。” 第一次危机中,哈定利用外交制衡,避免了端点星沦为附庸。但是外面会变化,这套手腕不可能一直玩得转,迟早会有一家崛起,打破平衡。随后就迎来第二次危机。哈定与他的政敌瑟麦克也有所交锋,哈定自有他的主意,而瑟麦克则主张主动出击;哈定将科技包装在宗教之中,但瑟麦克却认为这是种可耻的形式: “正好相反,那时应该全力防止开启战端。我让他们互相对立,并且分别协助他们,提供他们科学、贸易、教育、正统医疗等等。我使他们感到,让端点星成为一个繁荣的世界,要比作为一个战利品更有价值。这个政策维持了三十年的和平。” “是的,但你被迫用最可耻的形式来包装那些科援。你把它弄成宗教和鬼话的混合体,你还扶植了教士阶级,并且发明繁琐而毫无意义的仪典。” 哈定皱皱眉。“那又怎么样?我看不出它跟这个问题有什么关系。我最初那样做,是因为那些蛮子把我们的科学视为魔法,所以那种形式最容易让他们接受。教士阶级是自然形成的,若说我们出过力,也只是因势利导而已。这实在是微不足道的小事。” “但是由那些教士来掌管发电厂,就不是小事了。” “没错,可是仍由我们来训练。他们对于各种机器的知识全是经验法则,对于包在机器外面的宗教外衣深信不疑。” “万一有人识破了宗教的外衣,并且超越了经验法则呢,你又如何制止他学习到真正的科技,再兜售给出价最高的一方?那时候,我们对各王国还有什么价值呢?” “瑟麦克,几乎没有这个可能。你只看到了表面。四王国每年都选派最优秀的人员,来端点星接受教士培训教育,成绩最佳的还会留在这里继续深造。假如你以为那些留下来的教士──他们不但连一点科学基础都没有,更糟的是,所学到的还是刻意扭曲的知识──居然能参透核能工程、电子学和超曲速的理论,那么你对科学的看法就太浪漫、太愚蠢了。要达到这种境界,必须接受一辈子的训练,再加上一个聪明的脑袋才行。哈定用“荒唐的”宗教包装“崇高的”科技,可能是因为只有为端点星的力量赋予神秘的色彩,才能保全自身,不会落得被别人利用完就抛弃的下场,这样才恰恰能保存文明的火种。反之,则是在资敌,是教会了徒弟,饿死了师傅。端点星自然禀赋也很差,缺乏金属矿物,年轻的基地空有先进的技术和思想,却无力直接施展,而那时还没积蓄好力量,无法正面与强邻对抗。巧妇难为无米之炊,即使有着远见卓识,也不一定能功。在一些穿越文中,主角带着几百年后的知识过来,有了一番作为。但是……做生意最痛苦的是哪个阶段?积累原始资本的阶段。当时有实力的人也不是傻子,很可能直接抄袭你,或是动用盘外招。 如果周围得知有着普适的、清晰的路径能让发展力得到提升,会纷纷仿效,强大的邻国有的是手段吸引端点星的人才,到时候反倒会用端点星的力量毁灭端点星。想必那些被挖走的精英们为了优渥的条件,打着“科学无国界”之类的口号,坦然加入对方阵营。仿佛战国时期,强国的法家思想诞生于斗争最为酷烈的三晋一带,但是最后从这套学说受益最多的却是秦国。当然,我这里的意思并不是鼓励阻遏技术的交流与传播,传播自然有它的道理。只是传播的后果是微妙的,一些言论、作品在创作之后,仿佛就有了自己的生命力,不再是创作者所能掌控的。 真理是谁发现的没那么重要,存在才重要。野蛮人法师艾克萨罗斯说过,那些自诩天才的魔法师们,往往还在吟唱阶段的时候,就被没打算施法的兽人法师用裂骨技直接掐断了脖子。然后这些兽人法师会学习你的成果,再把天才和科学五个字讽刺地刻在你的墓碑上…… 正如特德·姜在受采访时所说的:“技术的一个特点在于它终将变得唾手可得, 而魔法注定永远不会被广泛拥有。”第二基地、盖娅的异能其实也有些像魔法般那样神秘。哈定市长、第二基地都将杀手锏牢牢掌控在自己人手中,而不为大众所知,在对外竞争中获得了优势。但他们又是靠什么避免自己人的背叛呢?像怀有异心的骡背离了盖娅后,仅仅一个人,就搅得银河天翻地覆。《基地边缘》中,第二基地的人也不像之前《第二基地》那么高尚、超然物外,内部同样有着派系斗争。如果有异见者为了自身,完全有可能背离谢顿那宏伟的计划(最后也确实偏离了)。基地的话,在哈定的谋略下,安然度过前面几十年,等羽翼丰满后,可以不用玩这套把戏,后面即使有人背叛,也掀不起什么大浪。但第二基地又靠的什么?希望能和吧友探讨。
NetHack吧导航 因原帖(https://tieba.baidu.com/p/6884642769)中的几个攻略帖和在线游玩的服务器链接失效、原QQ群被停用,故再更新一个导航帖。希望这个帖子能有所帮助。 各精品区职能 攻略:游戏攻略、技巧。 操作与配置:有关游戏操作、配置方面的指南。 下载与在线:下载和在线游戏的链接。 资讯与花絮:相关新闻、花絮等内容。 纪念与感想:收集吧友值得纪念的游戏经历,比如首次飞升、全职业飞升、达成成就飞升、奇葩的死法……还有吧友优质的对游戏的评价和感想。 吧友原创:吧友原创的相关作品,绘画、文字、小工具…… 吧务:吧务相关。 下载 NetHack官网:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.nethack.org%2F&urlrefer=e181dc9dcddd79c6a303a1866991be7c 3.6.1汉化发布:https://tieba.baidu.com/p/6047781218 这是目前有汉化的最新版,有Windows和安卓版。如果需要更早或其他平台的版本,请前往“下载与在线”精品区。 中文攻略 NetHack 指南:NetHack Guidebook 全文翻译:https://tieba.baidu.com/p/4194022120 新版:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fgithub.com%2Fw4ngzhen%2FNetHack_GuideBook_CN&urlrefer=eff6e90f67fd319021bce292fb975030 大型nethack萌新向教程:https://tieba.baidu.com/p/5487418622 NetHack所有按键命令翻译:https://tieba.baidu.com/p/1438247556 (补充:在3.6及之后,加入了新的快捷键ctrl o,可以查看楼层概述) NetHack图鉴:https://tieba.baidu.com/p/6894487964 NetHack鉴定攻略:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fjingyan.baidu.com%2Farticle%2F636f38bbef415996b84610b9.html&urlrefer=713c01323af3a16077319a37105e688b 【nethack中的信仰】——祈祷:https://tieba.baidu.com/p/4965699289 【nethack中的信仰】——捐钱:https://tieba.baidu.com/p/5113110874 【nethack中的信仰】——献祭:https://tieba.baidu.com/p/4979109938 nethack吃货攻略:https://tieba.baidu.com/p/5053784716 内在/外在属性:https://tieba.baidu.com/p/5393165300 [nethack]攻略(五)流程篇:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.newsmth.net%2FnForum%2F%23%21article%2FWesternRPG%2F84919&urlrefer=7472b7884760b20d7061dd56ebf8384b 【转】nethack FAQ翻译:https://tieba.baidu.com/p/1003157951 玩在线版Nethack的方法:https://tieba.baidu.com/p/1015581001 这些是我认为比较重要的一些攻略。想要了解更多,前往“攻略”和“操作与配置”精品区。我个人认为,目前中文攻略已经把重要的地方都讲到了,足够通关了。 维基 NetHack Wiki:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnethackwiki.com%2F&urlrefer=35215cf44f52a6f63e95c82ff2daa32f NetHack中文维基:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnethackcn.fandom.com%2Fzh%2F&urlrefer=ae1390cf90d7a78215b218bb995f8373 英文维基内容非常全面。中文维基近些年也完善了很多。 服务器 NAO:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Falt.org%2Fnethack%2F&urlrefer=0ae702ccbada7163bd2f898a341e1203 ssh [email protected] ascension.run:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fascension.run%2F&urlrefer=0a421cf4025a99e8119fa54389cb6ae4 [email protected] Hardfought:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.hardfought.org%2F&urlrefer=c07c38c8062e03499548ec532a35fda9 [email protected] [email protected] [email protected] BrowserHack: NetHack网页移植:https://tieba.baidu.com/p/3702833671 NetHack Webtiles 服务器:https://tieba.baidu.com/p/7267100424 价格鉴定网站 Determine Objects by their Price:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fnethack.gridbug.de%2Fprices.html&urlrefer=ca7c8bbbe4f1c7fd69c481f6734be315(推荐,比较细致) Clippy, the Shopping Assistant:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnethack.roy.org%2Fclippy&urlrefer=cd4b06fc298fc7a423d1356d6bab665e 贴图和音效配置 电脑版(针对windows)如何安装贴图包(新手向):https://tieba.baidu.com/p/8141425087 YHACS:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fxoomer.virgilio.it%2Fpid%2F&urlrefer=4ce91f9865ec9229655c60201082c9c8 NetHack设置音效:https://tieba.baidu.com/p/6061114087 情报站 Yet Another NetHack Site:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.steelypips.org%2Fnethack%2F&urlrefer=448a445a06d7c4a8c17c8474d31bb954 Codehappy's NetHack page:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.codehappy.net%2Fnethack%2F&urlrefer=af5b451c43d305e1d3936596f2186581 NetHack粉丝站点 The Greatest Game You Will Ever Play:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fthegreatestgameyouwilleverplay.com%2F&urlrefer=2d63d9779a53ec7183ba7388b627e9b5 收录着对NetHack的各种脑洞大开的想法的站点 NetHack Ideas Archive:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnethack-yanis.github.io%2F&urlrefer=81a26dfd17a86dc4fafc1dcd57d34266 其他版本和衍生版 NetHack: Legacy:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnethacklegacy.com%2F&urlrefer=62222cf720d4438cb2b98d8144695546 Vulture for NetHack:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fstore.steampowered.com%2Fapp%2F341390%2FVulture_for_NetHack%2F&urlrefer=df31594f332432e190433b511362d8b5 SLASH'EM:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.slashem.org%2F&urlrefer=a00d75db9e4c74b46c8992039d12ef13 Slash'EM Extended:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fnethackwiki.com%2Fwiki%2FSlash%2527EM_Extended&urlrefer=140770f1918b11f2b2013815205610c6 UnNetHack:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fsourceforge.net%2Fprojects%2Funnethack%2F&urlrefer=78b7e06bcdcff7d7c4cb46b633be93fb NetHack4:nethack4.org NetHack: Legacy和Vulture for NetHack都可以在Steam上买到,前者具有背景音乐和更丰富的成就,后者有着(伪)三维界面。 其他活跃社区 QQ群:653615655 最后,Elbereth镇楼。
Prolog的一些内置谓词 前言 Prolog内置了不少有用的谓词,得知一些,可以提升编程效率。《Programming In Prolog》(https://tieba.baidu.com/p/7964297542)的第6章总结了一些内置谓词,里面有几个我之前不怎么了解,读完后有一定收获。特别是第5节的内容,functor、=..等谓词甚至感觉有些元编程的味道。书中也提到了一些误区并进行了阐述,解答了我之前的一些困惑。我就在此把相关内容整理出来,但愿对后来人是有益的。如果只需要看最最基本的操作,可以看看之前写过的几篇教程:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.cnblogs.com%2Fzhangoke%2Fp%2F9510122.html&urlrefer=b18420956df66e91040ddea9d4f6721e。 当然,内置的有用的谓词不止这些,这个章节没有归纳操作列表等方面的一些谓词,后面有时间了再进行补充吧。 在电脑网页端,能正常显示加粗等格式,用电脑浏览此网页效果会更好一些。 1 导入新的子句 consult(X) 从文件中导入语句,如果有与现有谓词同名的谓词,会进行替换。如果文件名中含有“\”,前面需要再加上一个“\”,进行转义。 以列表形式导入 ?- [file1,file2,’fred.1’,’bill.2’]. 等同于 ?- consult(file1), consult(file2), consult(’fred.1’), consult(’bill.2’).2 成功与失败 true 其目标总是成功。这实际上是不必要的,因为子句和目标可以重新排序或重新组合,以避免使用true。然而,它的存在是为了方便。 fail 其目标总是失败。主要用在两个地方。一处是截断:。用来表示,“如果执行进行到这一步,那么可以放弃满足这一目标的尝试”。其形式为 …, !, fail. 另一处是,要明确要另一个目标回溯所有解决方案。你可能需要打印出所有解决方案。(但在我这边似乎没达到预期效果。)例如, ?- event(X, Y), phh(Y), fail. 3 界定项 var(X) 如果当前X是未实例化的变量,则var(X)成功。 nonvar(X) 如果当前X不是未实例化变量,则nonvar(X)成功。 atom(X) 如果当前X是Prolog的原子,则atom(X)成功。 number(X) 如果当前X代表一个数字,则number(X)成功。 atomic(X) 如果当前X是数字或原子,则atomic(X)成功。4 把子句视为项 Prolog允许程序员检查和修改程序(用于满足目标的子句)。这特别简单,因为子句可以被看作是普通的Prolog结构。因此,Prolog提供了内置谓词,从而可以实现(但在我这边似乎有点问题): likes(john, X) :- likes(X, wine) 等同于 ’:-’(likes(john, X),likes(X, wine)) 当规则中有多个目标时,这些目标被视为通过函子“,”(带两个参数)绑定在一起。 grandparent(X, Z) :- parent(X, Y), parent(Y, Z) 等同于 ’:-’(grandparent(X, Z), ’,’(parent(X, Y), parent(Y, Z)) listing(A) 可以在大多数Prolog系统中检查当前已加载的子句。一种常见的方法是使用内置谓词listing,如果满足listing(A),其中A会被实例化为一个原子,所有以该原子为谓词的子句会被输出。 clause(X,Y) 满足clause(X,Y),X和Y会与数据库中现有子句(适用于“公共”谓词)的头部和主体相匹配。当要满足其目标时,必须充分实例化X,以便得知子句的主谓词。如果谓词没有子句,那么目标就会失败。例如: ?- clause(append(A, B, C), Y). A = [], B = C, Y = true ; A = [_A|_B], C = [_A|_C], Y = append(_B, B, _C). asserta(X), assertz(X) 内置谓词asserta和assertz能用来向数据库添加新的子句(“动态”谓词)。这两个谓词的作用完全相同,只是asserta在数据库的开头添加子句,而assertz在结尾添加子句。 retract(X) 内置谓词retract能用来从数据库中删除子句(“动态”谓词)。其项必须被充分实例化,明确子句的谓词(就像asserta、clause等)。当满足时,会删除匹配的第1个语句。5 构造和访问结构成分 functor(T, F, N) 谓词functor的语法为functor(T,F,N),表示T为一个有着函子F和参数数量为N的结构。例: ?- functor(f(a, b, g(Z)), F, N). Z = _23, F = f, N = 3 ?- functor(a + b, F, N). F = +, N = 2 ?- functor([a, b, c], F, N). F = ., N = 2 ?- functor(apple, F, N). F = apple, N = 0 ?- functor([a, b, c], ’.’, 3). no ?- functor([a, b, c], a, Z). no 它也可以用来构造结构,例如,复制一个现有结构: copy(Old, New) :- functor(Old, F, N), functor(New, F, N). arg(N,T,A) 谓词arg在使用时必须要有其前两个参数。它用于访问结构的特定参数。第一个参数指定需要第几个参数,第二个指定被查找的结构,第三个则与寻找到的参数进行匹配。也说是说,如果T的第N个参数为A。例: ?- arg(2, related(john, mother(jane)), X). X = mother(jane) ?- arg(1, a+(b+c), X). X=a ?- arg(2, [a,b,c], X). X = [b,c] ?- arg(1, a+(b+c), b). no X =.. L 可以用functor和arg谓词创造和访问任意结构的参数。谓词“=..”提供了另一种方法。如果你想一次获得结构的参数,或者通过参数列表构建一个结构,这方法非常有用。L是由X的函子和X的参数组成的列表。例: ?- foo(a,b,c) =.. X. X = [foo,a,b,c] ?- append([A|B], C, [A|D]) =.. L. A = _2, B = _3, C = _4, D = _5,L = [append, [_2|_3], _4, [_2|_5]] ?- [a,b,c,d] =.. L. L = [’.’,a,[b,c,d]]. ?- (a+b) =.. L. L = [+,a,b]. ?- (a+b) =.. [+,X,Y]. X = a, Y = b. ?- [a,b,c,d] =.. [X|Y]. X = ’.’, Y = [a,[b,c,d]] ?- X =.. [a,b,c,d]. X = a(b,c,d). ?- X =.. [append,[a,b],[c],[a,b,c]]. X = append([a,b],[c],[a,b,c]) atom_chars(A,L) 谓词atom_chars将一个原子与组成它的字符列表相关联。这可以用于查找给定原子的字符,也可以用于查找具有某些给定字符的原子。atom_chars(A, L)表示“原子A的字符是列表L的成员”。例: ?- atom_chars(apple, X). X = [a,p,p,l,e] ?- atom_chars(X, [a,p,p,l,e]). X = apple number_chars(A,L) 该谓词与atom_chars类似,只是它应用于数字而非原子。请注意: ?- atom_chars(X, [’1’ ,’2’, ’3’]). 变量X将实例化为原子’123’。如果希望它是一个数字,则要用number_chars。例: ?- number_chars(123.5, X). X = [’1’, ’2’, ’3’, ’.’, ’5’] ?- number_chars(X, [’1’, ’2’, ’3’]). X = 1236 干涉回溯 repeat repeat谓词能够回溯无数次。 7 构造复合目标 X,Y 只有X和Y子句都成功,它才会成功。 X;Y X或Y子句成功,它就会成功。 类似前面第4节讲到的,它也有类似的另一种写法,例: person(X) :- (X=adam; X=eve; mother(X, Y)). 等同于 person(X) :- ’;’( X=adam, ’;’(X=eve, mother(X, Y)) ) call(X) 假设X被实例化为可以被解释为目标的项。如果满足X的尝试成功,则call(X)目标成功。如果满足X的尝试失败,则call(X)目标失败。乍一看,这个谓词似乎是多余的。例如: …, call(member(a, X)),… 总是可以换为 …, member(a, X),… 然而,如果通过“=..”、functor或arg构造目标,那么可以用call调用其中的未知函子的目标。例: …, Z =.. [P,X,Y], call(Z),… \+ X 如果满足X的尝试失败,则\+X目标成功。如果满足X的尝试成功,则\+X目标失败。 但需要注意: ?- member(X, [a,b,c]), write(X). 和 ?- \+ \+ member(X, [a,b,c]), write(X). 是有一定差别的,前者会输出a;而后者输出的变量会未实例化。 后者在试图满足里层的\+目标会失败,因为member目标会成功。现在请记住,当目标失败时,任何实例化的变量(例如示例中的X)必须要“忘记”它们所代表的含义。因此,X变为非实例化的。在满足外层的\+目标,它会成功,因为其中的\+目标语句失败了。但这里的X仍未实例化。 8 等式 X=Y 试图通过将X和Y匹配在一起来使它们相等。 X == Y 谓词“==”表示比“=”更严格的等式检验。也就是说,如果X==Y成功,那么X=Y也会成功。但反之却并非如此。“==”更严格的地方是它考虑变量的方式。“=”谓词会将未实例化变量等同于任何值,因为它将匹配任何值;但“==”则需要一个未实例化变量与另一个已与其共享的未实例化变量相等。否则失败。例: ?- X == Y. no ?- X == X. X = _23 ?- X=Y, X==Y. X = _23, Y = _23 ?- append([A|B], C) == append(X, Y). no ?- append([A|B], C) == append([A|B], C). A = _23, B = _24, C = _259 输入和输出 get_char(X) 如果X与当前输入流中的下一个字符一致,则此目标语句成功。get_char仅成功一次(无法再次满足)。在回溯时,移动到下一个字符的操作不会撤消,因为无法将字符放回当前输入流。 read(X) 该目标语句从当前输入流中读取下一个项,并将其与X匹配。其读取仅成功一次。读取的项后面必须跟一个点“.”,它不会成为项的一部分,并且至少有一个非打印字符。最后会从当前输入流中删除该点。 put_char(X) 此目标语句将字符X写入当前输出流。put_char只成功一次。如果X未实例化,则会发生错误。 nl 另起一行。nl只成功一次。 write(X) 此目标语句将项X写入当前输出流。写入仅成功一次。X中的任何未实例化变量都被写成以下划线开头的唯一编号变量,例如“_239”。要写入的同一共同引用变量在输出时具有相同的编号。 write_canonical(X) 谓词write_canonical的工作方式与write完全相同,只是它会忽略任何运算符声明。当使用write_canonical时,任何结构都会打印出来,首先是函子,然后是括号中的参数。 op(X, Y, Z) 该目标语句声明了一个具有优先类X、位置和关联性Y和名称Z的运算符。位置和关联度指定来自以下原子集合: fx fy xf yf xfx xfy yfx yfy 如果运算符声明合法,那么op将成功。10 操作文件 open(X, Y, Z) 打开一个名为X的文件。如果Y为read,则打开文件进行读取;如果Y为write,则打开文件进行写入。Z被实例化为一个特殊项,用于命名稍后访问文件时必须引用的流。 close(X) 当X是流的名称时,使用此选项。流在关闭后,无法再使用。 set_input(X) 将当前输入设置为以X为名的流。X将是open的第三个参数或原子user_input中返回的项,该参数指定输入将来自键盘。 set_output(X) 将当前输出设置为以X为名的流。X将是open的第三个参数或原子user_output中返回的项,该参数会指定在计算机输出显示。 current_input(X) 如果当前输入流的名称与X一致,则此目标语句成功,否则失败。 current_output(X) 如果当前输出流的名称与X一致,则此目标语句成功,否则失败。 11 算术表达式 X is Y Y必须实例化为算术表达式的结构。首先,对Y求值以得出一个数字。其结果与X匹配,根据匹配结果,目标语句成功或失败。 X+Y 加 X-Y 减 X*Y 乘 X/Y 浮点除法 X // Y 整除 X mod Y 取余 12 比较 X=Y 如第8节中描述的这个等式谓词,在两个数字相同时也会成功。然而,如果其中一个参数是变量,则这个谓词会让变量实例化,因为等式谓词会让两个参数一致。在许多数值计算中,这是不可取的。因此,Prolog专门为比较数字的相等和不相等提供了谓词。在以下所有谓词中,两个参数都必须实例化,否则会发生错误。使用这些谓词进行数值计算也可以使程序更高效地运行。 X =:= Y 数值相等 X =\=Y 数值不等 X<Y 小于 X>Y 大于 X >= Y 大于等于 X =< Y 小于等于 此外,Prolog还提供比较两项的谓词。通常项比较运算符仅用于比较同类型的项,但也能比较其他组合。 所有未实例化的变量都小于所有浮点数,浮点数小于所有整数,整数小于所有原子,原子小于所有结构。 对于两个非共享的未实例化变量,其中一个将小于另一个(哪个更少在不同的Prolog实现中可能不同)。 在这种比较下,两个浮点数中,数值小的更小;两个整数中,数值小的更小。 如果一个原子在正常的词典顺序中比另一个原子排在前面,那么它就比另一个原子小。准确地说,顺序取决于字符代码,至少对于字母字符是这样。 一个结构比另一个结构的元数小,则这个结构会更小。如果两个结构具有相同的元数,则根据函子排序(使用原子的排序方法)。如果两个结构具有相同的元数和函子,则通过依次对参数进行判断来排列它们——对于第一个不同的对应参数,相关参数的顺序就是结构的顺序。 X @< Y 按照上述顺序排列,左边小于右边 X @> Y 按照上述顺序排列,左边大于右边 X @>= Y 按照上述顺序排列,左边大于等于右边 X @=< Y 按照上述顺序排列,左边小于等于右边13 监视Prolog的运行 trace 启用穷举追踪。 notrace 停止穷举追踪。 spy P 可以使用谓词spy来关注某些特定谓词的目标。可以通过在它们上面设置监视点。这个谓词被定义为前缀操作符,因此不需要在参数周围加上括号。 debugging 内置谓词debugging可以用来查看当前设置了哪些监视点。 nodebug nodebug会移除当前所有监视点。 nospy 像spy一样,nospy也是一个前缀运算符。Nospy比nodebug更具选择性,因为可以精确地指定希望删除的监视点。
Prolog中的截断陷阱 《Programming In Prolog》的第4.4章节,截断的问题(Problems with the Cut)里,作者讲解了利用截断机制时可能会出的状况。内容很基础,但之前没太留意这个,只是把求解问题就得了,没考虑太多设计之外的情况。书中给出了两个示例: 示例一:将第2个列表附加到第1个列表之后,形成新的列表的代码: append([], X, X) :- !. append([A|B], C, [A|D]) :- append(B, C, D). 然后进行3个询问: ?- append([a,b,c],[d,e], X). ?- append([a,b,c], X, Y). ?- append(X, Y, [a,b,c]). 前2个的结果没什么问题,但第3个却出了问题,给出了这样的结果: X=[], Y=[a,b,c]. 它只给出这种情况的结果,因为在第1个参数为空,也能够匹配成功,但后面的截断会使查询就此打住。示例二:表述人的父母数量,亚当和夏娃例外的代码: number_of_parents(adam, 0) :- !. number_of_parents(eve, 0) :- !. number_of_parents(X, 2). 然后进行3个询问: ?- number_of_parents(eve, X). ?- number_of_parents(john, X). ?- number_of_parents(eve, 2). 前2个的结果没什么问题,但第3个却出了问题,给出了这样的结果: yes 这个命题应当为假才对。因为前面的语句匹配失败后,直接与number_of_parents(X, 2).语句进行匹配,而这个语句,会对任意第1个变量,都将第2个变量匹配为2。(而且这里解释器给出警告,说这个变量只出现过1次。需要表示任意值的话,用_符号更好一些。)书里就第2个示例给出了两个解决方案,将代码重写为: number_of_parents(adam, N) :- !, N = 0. number_of_parents(eve, N) :- !, N = 0. number_of_parents(X, 2). 或 number_of_parents(adam, 0). number_of_parents(eve, 0). number_of_parents(X, 2) :- \+(X=adam), \+(X=eve). 因此,只有当你对如何使用规则语句有明确的策略时,才能可靠地使用截断。如果你要更改相关规则语句,则必须审查所有使用截断的地方。
NetHack中喜欢熔岩的设定与飞行的设定 发现NetHack中有喜欢熔岩的设定,飞行这一属性也有很多差异。 有次想试试怪物坐在熔岩上,会有什么效果,结果出现了很多意想不到的东西,有微妙的地方,也有一点不合理的地方。情况大致可以分为三大类:火蜥蜴、火元素一类;会飞行的;不会飞行的。 因为火蜥蜴和火元素比较特殊,所以把它们单独划分出来。它们可以坐在熔岩上而不受伤,会提示“熔岩感觉温暖”。会飞行的,会产生两种情况,可能这与飞行类型有关。 大部分会飞行的,即使本身有火抗,比如红龙、炎魔,坐在熔岩上还是会受伤(当然,没火抗的会受到更多伤害),提示“熔岩烧伤了你”。更离谱的是,火旋涡也会受伤!它本身没有固定形态,自身就是火啊,怎么还会被火所伤。原先认为是屁股的原因,是那些怪屁股没做好防护,坐下了就会受伤。但有了火旋涡这种情况,屁股说又不成立了。应该是剩下的怪的火抗比不了火蜥蜴和火元素的。有一部分会飞行的,如果试图坐下,会提示“你就地跌倒”,比如火焰球、黑光,无法和熔岩产生交互。飞行属性就有些微妙了。尽管火元素、红龙、火旋涡和火焰球在维基上都显示飞行属性,没有区分,但这么一试,火焰球就其他怪的飞行就不太一样。之前也想过是不是火焰球和黑光因为攻击方式是自爆,所以设定不能随便碰东西。然而变身成浮眼,也出现了这个消息,看来是飞行方式有差异。不会飞行的,有三种情况。 如果没火抗,到熔岩上会直接死。 有火抗,穿着防火的水上步靴,是可以在熔岩上自由走动的,坐在熔岩上会提示“熔岩烧伤了你”,会受一定伤害。和前面的会飞行的第1种情况类似。 如果有火抗,不会飞,也没有穿水上步靴,移动到熔岩上,会受小伤,还会被卡住。这时坐在熔岩上,还是会受伤,会提示“你坐在熔岩里!”。当然,如果不及时抽身的话,还是会死。搞笑的地方来了,如果熔岩上没有物品,坐下时会不断受伤;但如果熔岩上有个东西,坐在上面,则不会继续受伤, 是因为有个垫的东西吗?屁股说又成立了!难道屁股是NetHack中怪物的阿克琉斯之踵!除了试了一下坐在熔岩上的效果,还试了试在熔岩中捡东西,大致可以分为三种情况。 即使有火抗,会飞行,或是穿着防火的水上步靴,尽管能在熔岩上移动,但还是无法捡起掉在熔岩里的物品。但奇怪的是,这种情况下,大部分会提示“你不能够到底部把东西捡起来”。而幽灵、火旋涡等,却提示“你如果试图把东西捡起来会被烧焦”。幽灵姑且就算了, 火旋涡出现这个提示有点搞笑。无法在熔岩上自由移动的,即使落入熔岩中,也无法拾取物品。在熔岩中会游泳是没用的,还是无法拾取物品,而且会往不断下沉。我试了试提前获得火抗,然后变身成水仙女、鲨鱼,依然会沉在熔岩中。 火蜥蜴是个例外,真正做到了在熔岩中完全自由行动,可以直接捡起熔岩中的物品。可能是NetHack所有怪物中唯一能做到这一点的?火元素则因为没有肢体,无法捡东西。 起初我以为火蜥蜴和火元素这么特别是因为火抗有高低。之前在维基上看到过,寒抗与冰的内容,如果没穿雪地靴,走在冰面上可能会滑倒,但像女武神、冰狼,这种有天生的寒抗的,则不会滑倒。 后来看了下源代码,是因为只有这两种怪有喜欢熔岩的设定,坐在熔岩上不会受伤。而火旋涡和火焰球只是有喜欢火的设定(而喜欢熔岩的都会喜欢火)。飞行确实有不同类型。普通的飞行类的自然很多;飘浮类的有眼类(浮眼、火焰球等等,e);气旋类(火旋涡等等,v),幽灵类(幽灵、戒灵等,W),等等。在判定“如果试图把东西捡起来会被烧焦”这一情况时,只排除了会飞行的大类中普通飞行类和飘浮类,就出现了火旋涡的不合理的情况。 最后,🦎蜥蜴女孩晓美焰镇楼。
NetHack的谣言与事实 译自(sites.google.com/view/evasroguelikegamessite/myths-and-facts-about-nethack)。这个文章在上高中就已看过,印象很深,赞叹NetHack设定的细致。当时是在http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.statslab.cam.ac.uk%2F~eva%2Fnethack%2F&urlrefer=0e1235ed717f17d08b95fd3e4b7c7996 还是剑桥的网站。结果去年开始,那个网页打不开,看样子是被移除了。原先还想把它加入导航帖。最近试着看看网上有没有人转载这个文章,后来找到了新网站,看样子是作者自己有所备份。 因为这个文章写得比较早,版本难免有些差异,对一些内容我加了注解,比如:“(注:兽人镇也有无阵营祭坛)”。 对文中的慢消化戒指还有疑惑,看样子可以根据戒指饥饿判定机制减少食物消耗,但感觉这样的话,绝食成就会容易得多,甚至有点无意义。 如有错误,欢迎指正! 禁忌行为的谣言 改变阵营 谣言:如果你在做任务前戴了敌对阵营头盔,你的任务导师不会让你进入,你在游戏中将无法取胜。 事实:只要卸下头盔,就可以继续任务。敌对阵营头盔只会导致暂时的阵营变化,当卸下头盔时,变化会逆转。(但它移除了神赐的所有保护,所以戴上它也不是个好主意。) 如果您永久地转换自己(通过在非结盟的祭坛上献祭),那将无法赢得游戏。你无法转换回去,而的任务导师也不会因戴着敌对阵营头盔而被愚弄。 在什么情况下您会永久转换自己? 对此也有一个谣言,我非常感谢迪伦·奥唐奈(Dylan O'Donnell)帮我整理。 谣言:如果你的神在你试着转换祭坛时发怒,那么你将被转到祭坛的神的阵营。 事实:如果你的神发怒,但你的阵营值为正,你仍能转换祭坛。您的神仍会生气,但你可以用新转换的祭坛来安抚他。 如果你的阵营值为负时尝试转换祭坛,或者在另一个神的祭坛上献祭了自己阵营的独角兽,则自己被转换。 谣言:无阵营祭坛(摩洛祭坛)不能被转换;这个尝试甚至有害。 事实:葛汉诺姆中无阵营祭坛无法被转换。葛汉诺姆之外无阵营祭坛(例如在某些任务中的祭坛)可以正常转换。但是,绝不可能将自己转到摩洛阵营。 杀死和平和驯服的怪物 对于杀死驯服和和平的怪物的确切惩罚似乎有很大的迷惑。 谣言:杀死宠物会激怒你的神。 事实:这取决于你如何杀死它。 如果您以普通方式杀死它(例如战斗),你将“听到远处的雷声。”对阵营值的惩罚是-15,对幸运值的惩罚是-1,但您的神不会生气。 如果你换位时将其移到陷阱或水中而杀死它,你可能(75%的几率)“感觉内疚像这样失去了你的宠物”。如果这样,您的神就会生气,并且你还失去15个点阵营值。 如果您在喷泉上饮水或浸泡时淹死了它或用种族灭绝卷轴杀了它,则不会受到任何惩罚。 杀死一个和平怪物的惩罚是失去一个或多点保护、失去心灵感应、降低幸运值和阵营值,这取决于被杀死的和平怪物的类型。 因杀死和平的怪物而受到惩罚中,失去保护是非常罕见的。仅当你杀死和平的祭司时才发生。(失去保护的最常见原因是引起神怒。) 如果你不是混沌阵营的,失去心灵感应就是杀死和平人类的惩罚。与此相关的信息是“你杀人了!”,你还失去2点幸运值。 如果您在不激怒的情况下杀死了一个和平怪物,则有50%的机会失去1点幸运值。除了上述对谋杀和杀死同阵营独角兽时-5运气惩罚之外。但是,近战攻击和平怪物,就能在它死前激怒它,从而避免了这种惩罚。即使用魔杖一击杀死怪物,大多数魔杖和咒语也能激怒它,但是诸如“敲击”或“变形”之类的“照射”攻击有可能在不激怒的情况下而杀死,并招致额外的惩罚。 杀死一个和平的怪物往往带来巨大的阵营值惩罚。如果怪物是在生成时总是和平的类型(店主、祭司、神谕、金库警卫、警卫员和警卫员队长、任务导师和守卫,囚犯、友好种族成员),则惩罚至少为-15,但杀死摩洛和平祭司则不受阵营值惩罚。如果因为结盟而和平,则惩罚至少为-9。这些惩罚仅适用于注定和平生成的怪物,不适用于随后生成的怪物。 (杀死)任务友人会导致你失去大量阵营值,结盟的祭司只受到-2的惩罚,但由于会失去保护所以不应当杀死,交叉结盟的祭司会带来少量的阵营值加成,而摩洛祭司会带来大量的阵营值加成。如果怪物死时仍保持和平(如上所述,这是不太可能的),则除非是任务导师、守卫或祭司,否则有额外惩罚-5。(这里的祭司应当指的是一些任务、星界中生成的非注定和平的祭司。) 杀、食用和献祭同族 无论你的种族是什么,杀死一个和平的人类都会使你失去心灵感应,除非你是混沌的。杀死一个和平的精灵、矮人、侏儒或兽人则不会。即使您是混沌阵营,杀死结盟的祭司也会使你失去所有保护。 吃自己的种族算是吃同类,会使你永久激怒怪物并降低幸运值,除非你是兽人或穴居人(或在Slash'EM中是狼人或吸血鬼)。 除非你是混沌阵营或变为恶魔,否则献祭同族是个非常糟糕的主意。 很容易判断出哪些怪物算矮人、侏儒、精灵或兽人,但弄清楚是人类还是非人类可能有些棘手。用@符号表示的,很明显,任何不是精灵的东西都是人类(注:美杜莎也不算人类),包括兽化人和变形怪。 吉斯通警察(任何用K表示的)也是人。 Slash'EM玩家应注意,精灵和黑暗精灵(Drow)属于同一物种,并且如果你是变形人,那么你的种族算人类,不应食用人类尸体。兽人、狼人和吸血鬼玩家不会因为食用或献祭同族而受惩罚,但为了一致性,这些对他们有效: 所有用o代表的都是兽人,包括地精和大地精。 只有兽化生物与狼人同种族。即,狼人不会在进食人类时感到邪恶和残忍,而只会在吃兽化生物时才会。 吸血鬼只有在吃吸血蝙蝠、火吸血鬼或星吸血鬼时才会感到邪恶和残忍。因为这最后两种不是亡灵人类,而是洛夫克拉夫特式的怪物,但吃掉它们也算吃了同类,这应该是个错误。吸血鬼尸体也会产生这种效果,但它们不存在——吸血鬼及其领主和法师在被杀死后会留下一具古老的人类尸体。 阵营差异 谣言:秩序的玩家祈祷等待时间比混沌的更短。 事实:所有阵营的祈祷等待时间完全相同。谣言源自Nethack 3.1.3中的一个错误,该错误导致它对加冕后的混沌阵营的时间更长。 谣言:秩序阵营角色不得抢劫商店/攻击和平的怪物/在饱腹时进食/ .... 事实:有各种各样的行为(例如抢劫商店),秩序阵营会为此受到-1阵营值惩罚,而混沌的则会得到+1奖励。还有其他行为(例如饱腹时进食),只有骑士或武士会受到惩罚(注:武士应当没有这个惩罚)。这些特定的类别/阵营方面的惩罚很小,通常可以安全地忽略。杀死和平怪物的阵营惩罚更为严厉,但适用于所有角色。有关影响阵营值的所有行为的详细信息,请参见Matthew Lahut的祈祷剧透的附录(http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.steelypips.org%2Fnethack%2Fpray.html%23app&urlrefer=b75c1fe13154936a1e3538614fea3542)。 矿镇中的钥匙 谣言:矿镇中,在警卫员的视野中可以用钥匙安全地开门。 事实:警卫员仍会警告您,然后他们注意到你这样做会生气。通常他们不会这样,因为用钥匙开门通常只需要1回合,而用开锁器或信用卡则需更长的时间。 携带鸡蛇尸体 谣言:如果你带着鸡蛇尸体掉入坑中,你会变成石头。 事实:只有你挥着鸡蛇尸体,坠落时才会变成石头。有关鸡蛇及其尸体的石化详情,请参见David Corbett的鸡蛇剧透。 其他谣言 祭坛 在祭坛上放一些物品,可看出它们是受祝福还是被诅咒的。这个祭坛可以是任何神,甚至是摩洛的。尽管显然你当时不能失明或产生幻觉。你也可以在任何阵营的神庙,从与神庙阵营相符的和平祭司,甚至是死谷中的摩洛祭司那里购买保护。(Slash'EM玩家应注意,梦魇层的有祭坛的房间不是神庙,因此你无法从那里的祭司那里获得保护。)Dylan O'Donnell的剧透收集了包括向祭司捐献的更多信息。 顺便说一下,如果祭坛和祭司与您的阵营相同,则为“结盟的”;如果阵营不同,则为“非结盟”或“交叉结盟”,即如果他们是秩序、中立或混沌的,则是“结盟”的,并且如果他们是摩洛的,则为“'无阵营”。无阵营的祭坛不会出现在主地牢中,只会出现在葛汉诺姆和某些任务中。(注:兽人镇也会有无阵营祭坛)。 消除魔杖 消除魔杖并不像许多人想的那么危险,只要注意不要把还有能量的放入次元袋。 在正式的Nethack中,消除全部库存的唯一方法是用消除魔杖挥向自己或故意折断它。消除魔杖由于任何其他原因而爆炸,例如被闪电击中,不会消除你的库存。在Slash'EM中,爆炸的消除魔杖会消除你的库存,因此在不用时,我将其放入布袋。此外,在Slash'EM中,但不是正式Nethack,怪物可以向你挥消除魔杖。发生这种情况时,库存中的每个物品有1/24的机会被消除。魔抗能完全抵御它。 尽管被消除很讨厌,但这只会影响你的物品——不会丢失任何内在属性。 消除次元袋会使它变成未受诅咒的次元袋,并不影响物品。非常适合骨档,其中包括装满有用物品的被诅咒的次元袋。 消除受祝福的防锈的+6雷神之锤,能使其变为未被诅咒的防锈的+0 雷神之锤。可能只有那些决意将神器武器附魔到+7的人对此感兴趣。 伊琳娜·瑞普特(Irina Rempt)写了一篇出色的剧透,阐述有关消除的所有内容。 圣水和邪水 浸入圣水或邪水的物品不会变白、稀释、生锈、变湿或遭受任何类型的水渍。他们只会被恰当地祝福或诅咒。浸入未诅咒的水,物品会遭受通常的水的影响。 训练宠物 谣言:如果在宠物吃掉之前先捡起并放下尸体,将使它更加驯顺。 事实:可以通过亲自喂养宠物来提高宠物的忠诚或亲自取东西的意愿。但是,只有食品才能达到这个目的,而尸体不是食品。牛肚和肉丸是狗的食品,苹果和胡萝卜则是马的。 无论你是否接触过食物,只要宠物进食,会更驯顺,更不可能变野。 我已经写了一篇有关驯服和叼取的详细剧透(sites.google.com/view/evasroguelikegamessite/keeping-and-training-pets-in-nethack-and-slashem),而彼得·斯内灵(Peter Snelling),布德维恩·韦斯(Boudewijn Wayers)和布莱恩·巴特勒(Bryan Butler)也写过详细的剧透,阐述了训练宠物偷窃的方法。 隐形宠物 谣言:如果您能看到隐形的,那将你的宠物隐形是好主意。 事实:这仅适用于坐骑。隐形对怪物间的战斗没有影响,但是如果你的坐骑隐形,那么怪物会更频繁地攻击你。这是好是坏取决于你的强度以及对坐骑存活的关心程度。 仙女的诱惑 谣言:雌性相比雄性更能抗拒仙女。 事实:尽管Nethack的仙女“调戏”雄性和“哄骗”雌性,但提示中的差异纯粹是装饰性的,你的性别不会影响你被仙女的诱惑。 时间和日期效果 谣言:如果在新月开始游戏,那么您的基础幸运值是-1。 事实:新月对基础幸运值没有影响。唯一的效果是鸡蛇会稍危险些。当13日为星期五时,开始或继续游戏会受到幸运值减1的惩罚,在满月期间开始或继续将有1点幸运值加成(它们可以相抵)。布德维恩·怀耶斯(Boudewijn Waijers)和迪伦·奥唐奈(Dylan O'Donnell)编写了剧透,详细介绍了时间和日期对游戏的影响。 获得内在属性 谣言:最好在进食天狗前患上传送病,因为那样更有可能给你传送控制。 事实:当您吃一个可以给予多种内在属性的怪物时,首先会随机选择要尝试授予的内在元素,而不参考你当前的内在属性,然后判定是否会给予该属性。当然,只有在你还没有的时候,才能被给予。 吃戒指 谣言:为了内在属性吃增加伤害戒指会永久增加您的食物消耗。 事实:吃戒指或护身符通常不会增加食物消耗(与佩戴它们不同)。唯有的例外是,通过吃戒指获得内在的再生、冲突或饥饿会每2合使你的食物消耗增加1点(正常食物消耗是每回合1点)。 关于戒指和食物的消耗,持续戴2个慢消化的戒指是没有意义的。当1个时,每20回合食物消耗1点,但2个时,则每10回合食物消耗1点,因为两个戒指都引起“戒指饥饿”效应。由于何时检测戒指饥饿的细节,你可以通过大多时间佩戴两枚慢消化戒指来将你的食物消耗减到0,在它们触发饥饿效果之前把它们拿掉,然后再换掉。(注:这么说的话,绝食成就只是操作意识上的问题?) 迪伦·奥唐奈(Dylan O'Donnell)就食物方面写了一个剧透,其中列出了影响食物消耗的所有因素。 誓约胜利之剑 谣言:骑士比其他职业获得誓约胜利之剑更容易。 事实:5级及以上的任何秩序角色通过浸泡获得誓约胜利之剑的几率完全相同。誓约胜利之剑过去在3.3.1版中向非骑士爆炸,但此错误已在3.4.0版中被修复。 谣言:骑士献祭的第一个礼物是誓约胜利之剑。(注:根据目前测试版的情况,3.7版中可能确实如此。) 事实:实际上,不能通过献祭获得它,也不会随机生成它。 学习魔法 谣言:您的施法属性数据(智力或感知,取决于你的职业)会影响您学习魔法的几率。 事实:无论您是什么职业,智力都会影响您学习魔法的几率,而感知则不会。 施法属性数据适用于成功施法的几率。 施被遗忘的魔法 谣言:在Nethack 3.4.3中,通过遗忘的魔法使自己混乱没以前那么有用,因为它也可能使你眩晕。 事实:被遗忘的魔法确实能使你眩晕,但你可以轻易使用独角兽的角,然后重试,直到状态是混乱而不是眩晕。同样,被眩晕会阻止传送控制,但不会影响除传送以外的任何卷轴的阅读效果。 振动方块 谣言:如果你将物品放在上面或在站着向下挖掘,则震动方块会移动。 事实:振动方块永远不会动,也不会被摧毁。而且,尽管它能在物体下面生成,但它不会在墙内或陷阱上生成。当你走上去,你会感到脚下有种奇怪的振动。无论您是正常走到那里还是传送(跨层)到那里,都会发生这种情况。即使您正在飘浮、飞行或骑乘,仍会感到震动。 保持低经验等级 谣言:保持较低的经验等级,以使带着护身符爬向元素层时,遇到的怪物的危险性降低。 事实:随机生成的怪物的难度等级上限通常是您的经验等级和当前地牢等级的平均值。但是,一旦有了岩德护身符,上限就会增到您的经验等级和摩洛密室的地牢等级的平均值。 (还有一个下限,但这仅取决于摩洛密室的深度,而不取决于您的经验等级。)摩洛密室永远不会出现在45层以上,并且完成任务后角色经验等级至少为14,除非故意降级。 难度最高的随机出现的怪物是大巫妖,为29。为避免遇到它们,等级要为12或更小(假定摩洛密室尽可能浅)。大多数人通过种族灭绝来避免遇见它们。其次是执政官,难度等级为26,而要避免他们则等级要为6或更小。 尽管有生成特定类型怪物的规则(生成的怪物超过你两倍经验等级可能很小,但仍会出现),唯一这可能在飞升时引起麻烦的地方是星界,且没有灭绝巫妖大师和大巫妖。 巫师的再现 谣言:当你进入土层时,岩德巫师将是最后一次出现,一旦在那里杀了他,他就再也不会回来。 事实:他在土层被杀后可以重新出现在任何元素层,但他不会出现在星界。(注:但可以尾随到星界。) 最后,来杯神谕(Oracle)的Java镇楼。
求两点间的最短距离和路径。 @傻傻De站着Xiao 你的第二个问题可以说得到了解决。 昨天在思考你的问题时,试了多次,还是没解决。决定网上找找思路。发现了一篇文章(http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cpp.edu%2F~jrfisher%2Fwww%2Fprolog_tutorial%2F2_15.html&urlrefer=41380148b10771a6f1a9454df3c44884),它所讲的就是这种问题,图中是一些相连接、互通的点,求两点间的距离;而且它的更进一步,并要推导出路径。 试了下,你的问题可以套用那个代码。看完了文章,发现自己原先的思路有问题,感觉这道题比第一道要难不少。它的问题中,两点之间的距离还不等长。 其代码(http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cpp.edu%2F~jrfisher%2Fwww%2Fprolog_tutorial%2F2_15A.pl&urlrefer=136d2441d7b9768dc09c5622ac6a9bef)如下: edge(1,2,1). edge(1,4,3.5). edge(1,3,2.5). edge(2,3,1). edge(2,5,2.5). edge(3,4,1). edge(3,5,2.2). edge(4,5,1). connected(X,Y,L) :- edge(X,Y,L) ; edge(Y,X,L). path(A,B,Path,Len) :- travel(A,B,[A],Q,Len), reverse(Q,Path). travel(A,B,P,[B|P],L) :- connected(A,B,L). travel(A,B,Visited,Path,L) :- connected(A,C,D), C \== B, \+member(C,Visited), travel(C,B,[C|Visited],Path,L1), L is D+L1. shortest(A,B,Path,Length) :- setof([P,L],path(A,B,P,L),Set), Set = [_|_], % fail if empty minimal(Set,[Path,Length]). minimal([F|R],M) :- min(R,F,M).%最短路径 min([],M,M). min([[P,L]|R],[_,M],Min) :- L < M, !, min(R,[P,L],Min). min([_|R],M,Min) :- min(R,M,Min). /* 询问示例 ?- shortest(1,5,Path,Length).*/
如何让GNOME 3配色自适应壁纸?顶栏自适应窗口最大化? 用过些桌面了,Unity、KDE、Xfce、GNOME……最喜欢的桌面环境是GNOME 3,简洁、大气、一致。我最早接触到的桌面环境是Unity,Unity从最开始的外界对它褒贬不一,随着逐渐发展,也变得稳定、成熟。然而Canonical却放弃了对它的维护。Unity还是有一些优点令人怀念。 我最常用的系统是Fedora和Windows 10。Win 10的界面有一个设定我非常喜欢。在“个性化”设置中,可以将主题颜色与壁纸适应,连一些图标的颜色都变了。这使得界面风格更为一致。但美中不足的是,拖动鼠标形成的选定区域却仍是默认的蓝色,开始菜单中一些图标的底色也没有改变。(壁纸来源:spacecatsamba.com) 而在Unity中,则更进一步。改变了壁纸,Dash的主题色也会随之自适应,在桌面上拖动鼠标形成的选定区域也会自适应。就我的感受而言,GNOME 3的配置能力还是比较强大的,有没有插件能够实现配色自适应壁纸的功能?或者需要改动哪些配置? 另一个问题则是窗口的问题了。有个版本的Fedora,或者说是某个版本GNOME 3吧(如果Fedora没在其中增加东西)。当窗口没有最大化时,顶栏是透明的,与壁纸很协调;而当窗口最大化时顶栏是黑的,与窗口标题栏一致。很喜欢这个功能。而有些主题就没有考虑自适应功能,顶栏一直是透明的,当最大化窗口时,上方显露出的壁纸就比较突兀。不知道开发者出于什么考虑,更新后,这个功能没了。实现这个功能需要哪些设定?
1 下一页