【问题标题】:Remove single Quotes in prolog (Html - Prolog)删除序言中的单引号(Html - Prolog)
【发布时间】: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


【解决方案1】:

终于找到解决办法了!!!

%We take the request from Form

addition(Request):-
member(method(post),Request),!,
http_parameters(Request,
[
    newRuleData(RuleData,[length>0, string]),
    newRuleCon(RuleCon,[length>0, string]),
    newRuleResult(RuleResult,[length>0, string])
]),
addNewRule(RuleData,"Answer",RuleCon,RuleResult),
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>
            <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
            <title>Επιτυχία</title>
        </head>
        <body>
            <div class="navbar-fixed">
                <nav>
                    <div class="nav-wrapper teal lighten-2">
                        <a href="#!" class="brand-logo center">WebApp της εργασίας 2</a>
                    </div>
                </nav>
            </div>
            <div class="container center">
                <h4>Η εισαγωγή του κανόνα πέτυχε.</h4> 
                <br><br>
                <a class="waves-effect waves-light btn-small" href="http://localhost:8000/update"><i class="material-icons left" >arrow_back</i>Back</a>
                <a class="waves-effect waves-light btn-small" href="http://localhost:8000"><i class="material-icons left" >home</i>Home</a> 
                <br><br><br>
                <h3>Μάνος Κουτουλάκης 4002</h3>
            </div>
        </body>
    </html>'                   
]).

当我从我的页面获取数据时,我使用addNewRule,在这里我们进行流程。 max_ruleId/1rules/1 来自我的知识库,第一个包含在规则总和中,另一个是 list,其中包含所有 id。

addNewRule(RuleData,RuleResultVariableName,RuleCon,RuleResult):-
   %προσθήκη 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)),
   atom_string(NewRuleId, SRuleId),
   string_list_concat(
      [
        "rule(", SRuleId, ",", RuleData, ",", RuleResultVariableName, 
        "):-",
        RuleCon, ",", RuleResultVariableName, "='", RuleResult, "'"
      ],
      StringRule
  ),
  term_string(Rule, StringRule),
  assertz(Rule),
  saveRules.

连接字符串的谓词:

string_list_concat([], S):- 
  S = "".
string_list_concat([H], S):- !, 
  string(H), 
  S = H.
string_list_concat([H|T], S):- 
  string_list_concat([H|T], "", S).
string_list_concat([H|T], Acc, S):- 
  string(H),
  string_concat(Acc, H, Acc1),
  string_list_concat(T, Acc1, S).
string_list_concat([], Acc, S):- 
  S = Acc.

基本上我从 HTML 获取输入(使用http_parametres/2),我使用string_list_concat 将所有输入合并到一个字符串列表中 最后将规则声明到我的知识库中,我使用term_string/2 将字符串转换为术语,并且引号已经消失。也许我的问题应该有所不同。

【讨论】:

  • 你需要解释你做了什么。仅仅发布代码并不是一个真正可以接受的答案,因为人们必须寻找差异来学习一些东西。 StackOverflow 是关于学习,而不仅仅是获得答案。
  • 希望我的解释能有所帮助!
  • 更好,但我仍然需要阅读您的代码才能理解它。不用担心,当我第一次开始使用 StackOverflow 时,我还不如现在。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多