gpt4 book ai didi

qt - 如何使用 QProcess 获得 SWI-prolog 查询的下一个解决方案?

转载 作者:行者123 更新时间:2023-12-04 12:41:46 28 4
gpt4 key购买 nike

我正在尝试将 SWI-prolog 与 QProcess 结合起来。所以我已经可以与 prolog 交互并向它发送问题,但我总是只得到第一个答案。所以我尝试发送像“n”或“r”这样的字符,它们应该像在 shell 中一样给我查询的下一个答案。但是,它不适用于 QProcess。这是我的代码:

connect(&p,SIGNAL(readyReadStandardError()),this,SLOT(readStdError()));
connect(&p,SIGNAL(readyReadStandardOutput()),this,SLOT(readStdOut()));

p.setProcessChannelMode(QProcess::MergedChannels);
p.start("swipl",QIODevice::ReadWrite | QIODevice::Unbuffered);
if(!p.waitForStarted())
return;

p.write("consult(ws).\r\n"); //prolog program
if(!p.waitForBytesWritten())
{
p.close();
return;
}

p.write("test(X,Y).\r\n"); //query
if(!p.waitForBytesWritten())
{
p.close();
return;
}

p.write("n",1); //give me the next solution -> nothing happens

我不知道该怎么办了。我怎样才能得到下一个答案,或者我怎样才能让 prolog 显示所有答案?

最佳答案

我会用类似的东西

p.write("forall(test(X,Y), writeln(test(X,Y))).\r\n");

或者更可重用的东西

QString q("forall(%1, writeln(%1)).\r\n");
p.write(q.arg("test(X,Y)"));

你明白了......

如果您愿意,也许为了简化答案解析,打印分隔变量

p.write("forall(test(X,Y), maplist(writeln, [X,Y])).\r\n");

关于qt - 如何使用 QProcess 获得 SWI-prolog 查询的下一个解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14020217/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com