【发布时间】:2018-12-06 21:26:29
【问题描述】:
您好,我的项目有问题!
我们在 prolog 中有一个知识库,我们必须制作一个 Web 应用程序来添加、编辑或删除 KB 中的规则。我的问题是当我使用此代码在 KB 中添加规则(使用 html)时:
addRule(_Request):-
format('Content-type: text/html~n~n'),
print_html([
'<html>
<head>
<link rel="stylesheet" type="text/css" href="/materialize/css/materialize.css">
<script src="/materialize/js/materialize.js"></script>
<title>Rules</title>
</head>
<body>
<h4>Εισαγωγή κανόνα</h4>
<form action="/addition" method="POST">
Δώσε τα δεδομένα :
<div class="input-field inline">
<input type="text" name="newRuleData" class="validate">
</div>
Δώσε τις προυποθέσεις :
<div class="input-field inline">
<input type="text" name="newRuleCon" class="validate">
</div>
Δώσε το αποτέλεσμα :
<div class="input-field inline">
<input type="text" name="newRuleResult" class="validate">
</div>
<button class="black-text btn waves-effect waves-light green" type="submit" name="action">ADD</button>
<br><br><br>
</form>
</body>
</html>'
]).
当我按下添加按钮时:
addition(Request):-
http_parameters(Request,[
newRuleData(RuleData,[default('NULL')]),
newRuleCon(RuleCon,[default('NULL')]),
newRuleResult(RuleResult,[default('NULL')])
]),
%προσθήκη max_ruleId
max_ruleId(MaxID),
NewMaxID is MaxID+1,
atom_concat(rid,NewMaxID,NewRuleId),
retract( max_ruleId(MaxID) ),
asserta( max_ruleId(NewMaxID) ),
%προσθήκη στα Rules
rules(List),
append(List,[NewRuleId],NewList),
retract(rules(List)),
asserta(rules(NewList)),
assertz((rule(NewRuleId,RuleData,Answer):- RuleCon,Answer=RuleResult)),
saveRules.
之后,我进入我的知识库,我看到了这个:
rule(rid15, '[LabValues,Saturation,Nitrate,Oligochaetes,Sediments,Hydrothio,Methanio,Substrates,SmellWater]', A) :-
'LabValues = nai, atom_number(Saturation,Sat), Sat>100',
A='Evales poli megalo koresmo'.
规则必须如下所示:
rule(rid15, [LabValues,Saturation,Nitrate,Oligochaetes,Sediments,Hydrothio,Methanio,Substrates,SmellWater], A) :-
LabValues = nai, atom_number(Saturation,Sat), Sat>100,
A='Evales poli megalo koresmo'.
我想删除引号,但我不能。
编辑
目前使用term_to_atom/2 删除引号,但它在我的知识库中给了我这个
rule(rid21, [_, _, _, _, _, _, _, _, _], B) :-
true,
atom_number(_, A),
A>100,
B='Evales poli megalo koresmo'.
【问题讨论】:
-
对不起,我的朋友我想删除以下引号:'[LabValues,Saturation,Nitrate,Oligochaetes,Sediments,Hydrothio,Methanio,Substrates,SmellWater]' 到此:[LabValues,Saturation,Nitrate ,Oligochaetes,Sediments,Hydrothio,Methanio,Substrates,SmellWater] 我认为如果我转换它是一样的
-
我使用了 term_to_atom/2 它删除了引号,但它给了我这个结果:[_, _, _, _, _, _, _, _, _]
-
嗯,它们是大写的,所以它们看起来像 Prolog 的单例变量。您不想“删除单引号”,而是要解析字符串,这有点不同。
-
但这应该可以工作
['LabValues','Saturation','Nitrate','Oligochaetes','Sediments','Hydrothio','Methanio','Substrates','SmellWater'] -
我正在尝试分析原子但什么也没有
标签: html prolog swi-prolog