gpt4 book ai didi

C# 和 SWI-Prolog - 将字符列表转换为事实列表

转载 作者:行者123 更新时间:2023-11-30 16:21:40 26 4
gpt4 key购买 nike

因此,我正在使用 Unity3D 开发游戏,并且使用 Prolog 进行 IA 规划。我的问题与猴子和香蕉问题非常相似,但我在断言新的初始状态时遇到了问题。

通过改变初始状态,每当环境中的重要事情发生变化时,我的角色就​​能够重新计划他的行动。

但让我们回到我的问题:

我正在通过套接字将一个字符串传递给 prolog,并且我想构建一个事实列表。然后,我想将这些事实用作我的计划程序的初始状态。

通过将字节数组转换为字符列表,我能够在 SWI 终端上写入套接字的输入流。通过在输出流上写一些东西,我还能够从 prolog 服务器取回一个字符串。但我不知道我应该如何将这些字符/字符串变成事实列表。

此外,我想将该事实列表用作初始状态,将其传递给规划过程,就像我将参数传递给命令式编程语言中的函数一样(如果是这样的话)。

我想做的是这样的(伪代码):

% on the prolog server, we have a main function
% we get a bytestream (In),
% turn it into a list of facts
% use it as the initial state
% and write Plan to the output stream (Out).

loopback(In, Out) :-
\+at_end_of_stream(In),
read_pending_input(In, Codes, []),
atom_codes(AtomList, Codes), %bytes into a list of atoms
toFacts(Init, AtomList), %??? Init = AtomList to list of facts
test(Init, Plan), %pass Init as the initial state
format(Out, '~s', Plan), %Get the plan back and write to the output
flush_output(Out),
loopback(In, Out).

% Init should look like this - a mere list of facts:
Init = [on(monkey, floor),
on(box, floor),
at(monkey, a),
at(box, b),
at(bananas, c),
status(bananas, hanging)].

% The planning predicate - Init as an argument, Plan is the result
test(Init, Plan):-
write('Initial state:'),nl,
write_sol(Init),
Goal = [status(bananas, grabbed)],
nl,write('Goal state:'),nl,
write(Goal),nl,
solve(Init,Goal,Plan).

我现在真的卡住了,希望有人能帮助我。谢谢!

引用资料:

Full monkey banana problem code.

SWI socket server code example.

最佳答案

您有很多选择:最简单的似乎是 read_from_codes

test :-  
S = "[on(monkey, floor),
on(box, floor),
at(monkey, a),
at(box, b),
at(bananas, c),
status(bananas, hanging)].",
read_from_codes(S, T),
writeln(T).

结果

?- test.
[on(monkey,floor),on(box,floor),at(monkey,a),at(box,b),at(bananas,c),status(bananas,hanging)]
true.

但是使用像 JSON 这样的专用协议(protocol)可以更容易地交换结构化数据。 .我只是通过 AJAX/jQuery 使用它。也许对你的用例来说有点矫枉过正......

关于C# 和 SWI-Prolog - 将字符列表转换为事实列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023656/

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