- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下测试代码试图将文件读入列表
open('raw250-split1.pl', read, Stream),
read(Stream,train_xs(TrainXs)),
length(TrainXs, MaxTrain).
yap
,
➜ chill git:(master) ✗ yap [18/06/19| 5:48PM]
% Restoring file /usr/lib/Yap/startup.yss
YAP 6.2.2 (x86_64-linux): Sat Sep 17 13:59:03 UTC 2016
?- open('raw250-split1.pl', read, Stream),
read(Stream, train_xs(TrainXs)),
length(TrainXs, MaxTrain).
MaxTrain = 225,
Stream = '$stream'(3),
TrainXs = [[parse([which,rivers,run,through,states,bordering,new,mexico,/],answer(_A,(river(_A),traverse(_A,_B),next_to(_B,_C),const(_C,stateid('new mexico')))))],
<omited output>
,[parse([what,is,the,largest,state,capital,in,population,?],answer(_ST,largest(_SU,(capital(_ST),population(_ST,_SU)))))]]
swi-prolog
,它将产生
Type error
➜ chill git:(master) ✗ swipl [18/06/19| 7:24PM]
Welcome to SWI-Prolog (threaded, 64 bits, version 7.6.4)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.
For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).
?- open('raw250-split1.pl', read, Stream),
read(Stream, train_xs(TrainXs)),
length(TrainXs, MaxTrain).
ERROR: raw250-split1.pl:4:
Type error: `list' expected, found `parse(which.(rivers.(run.(through.(states.(bordering.(new.(mexico.((/).[])))))))),
<omited output>
,answer(_67604,(state(_67604),next_to(_67604,_67628),const(_67628,stateid(kentucky))))).[].(parse(what.((is).(the.(largest.(state.(capital.(in.(population.((?).[])))))))),answer(_67714,largest(_67720,(capital(_67714),population(_67714,_67720))))).[].[]))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))' (a compound)
In:
[10] throw(error(type_error(list,...),context(...,_67800)))
[7] <user>
Note: some frames are missing due to last-call optimization.
Re-run your program in debug mode (:- debug.) to get more detail.
raw250-split1.pl
可以从
ftp
找到网址如下,如果你想试试。
SWI-Prolog
,写在
SICStus 3 #3: Thu Sep 12 09:54:27 CDT 1996
或更早
最佳答案
raw250-split1.pl
显然是使用规范符号编写的。传统的列表仿函数是 ./2
但 SWI-Prolog 7.x 将其更改为 '[|]'/2
为了使用 ./2
用于其他目的。这导致变量 TrainXs
被 read/2
实例化调用其参数 的复合词不是 一个列表:
?- open('raw250-split1.pl', read, Stream), read(Stream,train_xs(TrainXs)).
Stream = <stream>(0x7f8975e08e90),
TrainXs = parse(which.(rivers.(run.(through.(states.(bordering.(... . ...)))))), answer(_94, (river(_94), traverse(_94, _100), next_to(_100, _106), const(_106, stateid('new mexico'))))).[].(parse(what.((is).(the.(highest.(point.(... . ...))))), answer(_206, (high_point(_204, _206), const(_204, stateid(montana))))).[].(parse(what.((is).(the.(most.(... . ...)))), answer(_298, largest(_300, (population(_298, _300), state(...), ..., ...)))).[].(parse(through.(which.(states.(... . ...))), answer(_414, (state(_414), const(..., ...), traverse(..., ...)))).[].(parse(what.((is).(... . ...)), answer(_500, longest(_500, river(...)))).[].(parse(how.(... . ...), answer(_566, (..., ...))).[].(parse(... . ..., answer(..., ...)).[].(parse(..., ...).[].(... . ... .(... . ...))))))))).
./2
列表的仿函数,这解释了为什么它可以处理它。 SWI-Prolog 的解决方法是使用
--traditional
启动它。命令行选项:
$ swipl --traditional
...
?- open('raw250-split1.pl', read, Stream), read(Stream,train_xs(TrainXs)).
Stream = <stream>(0x7faeb2f77700),
TrainXs = [[parse([which, rivers, run, through, states, bordering|...], answer(_94, (river(_94), traverse(_94, _100), next_to(_100, _106), const(_106, stateid('new mexico')))))], [parse([what, is, the, highest, point|...], answer(_206, (high_point(_204, _206), const(_204, stateid(montana)))))], [parse([what, is, the, most|...], answer(_298, largest(_300, (population(_298, _300), state(...), ..., ...))))], [parse([through, which, states|...], answer(_414, (state(_414), const(..., ...), traverse(..., ...))))], [parse([what, is|...], answer(_500, longest(_500, river(...))))], [parse([how|...], answer(_566, (..., ...)))], [parse([...|...], answer(..., ...))], [parse(..., ...)], [...]|...].
length/2
当第一个参数被绑定(bind)时,期待一个列表。
关于file - 区别 yap 和 swi-prolog 阅读规范列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50927685/
我需要在某些 Prolog 问题中使用前向链接器。 我想避免使用普通的元解释器从头开始实现它(但如果没有其他选项可用,我将不得不这样做),因为使用元解释器执行此操作会很慢,而且我我确信应该有一些好的实
谁能解释为什么下面的 YAP 代码不会导致变量 Result 与 time_out 统一? ?- time_out(sleep(3),1,Result). Result = success. ?- t
我正在尝试自学 Rust,作为一个具有挑战性的学习项目,我想复制 C++ 表达式模板库的设计模式 boost::yap .我不想要一个完整的实现,我只想要一个小型演示程序来了解 Rust 的泛型是否足
有没有办法配置 YAP(和/或 SWI prolog),以便它们在对 term_to_atom/2 的任何调用中保留变量名称?。 例如,当我执行此操作时: term_to_atom(member(X,
当使用 YAP 执行以下 Prolog 程序时,输出始终相同,即整数 233。 :- use_module(library(random)). x:- random(1,1000,X), wri
我们正在使用 YQL 获取 Yahoo! 中的配置文件信息使用 YAP 的应用程序,但是,我们在执行 YQL 查询时遇到错误。我们正在使用 OpenSocial Gadget AJAX 功能进行调用。
我正在开发 Yahoo!需要加载和使用某些外部 Javascript 框架的应用程序。也在雅虎! App Best Practices Guide,还提到应该将源外部化,但是,外部化对我不起作用。 我
示例程序枚举并计算 8 皇后解的数量。 (对不起,如果代码难以阅读;这是从 S 表达式机器生成的。原始代码是 https://www.cpp.edu/~jrfisher/www/prolog_tuto
我正在尝试在我的 PC 上编译 yap,因为 YAP 默认安装程序似乎没有启用深度限制标志。我需要它来处理 Aleph 上的 ILP 项目。 问题是,我被迫使用装有 Windows 8 的 PC,但没
我有以下测试代码试图将文件读入列表 open('raw250-split1.pl', read, Stream), read(Stream,train_xs(TrainXs)), length(Tra
当我在 GNU Prolog 和 SWI Prolog 上运行此代码时,它可以正确计算差异列表中的元素数量。然而,Yap 进入了无限循环。 count(X-X1,0) :- unify_with_oc
我正在尝试将 JPL 用于 Java 程序和 YAP Prolog 的交互。 在我的 java 文件中,这一行抛出异常: Query query = new Query("consult", new
我是一名优秀的程序员,十分优秀!