Prolog回答Argument = Argument,而不是回答No

时间:2017-03-31 12:33:29

标签: list prolog arguments undefined

如果search_answer没有找到答案,我该怎么做prolog回答? 是的,L = [答案]

search_answer:谓词返回列表或将A作为自由变量。

 found_list(L) :-
   search_answer(L).

例如,当被问到found_list(L)时,虽然search_answer没有找到答案,但Prolog仍然回答是。我打印L,它等于_496,一个自由变量。

鉴于以上代码段,如果found_list找到了一个列表,L = [...]会回复search_answer,否则会返回L = L,而我想回答否

我尝试了以下操作,但没有工作

found_list(L) :-
   search_answer(L) , is_list(L).

enter image description here

liar_detector是我的search_answer谓词,L = answer 和骗子是我的found_answer

1 个答案:

答案 0 :(得分:2)

found_list(L) :- search_answer(A).中,LA都是单身人士。我猜你看到了警告。您需要修复此谓词才有意义。你真的想要L = [Answer]L = Answer吗?

你可以用这种方式实现目标:

found_list(A) :-
    search_answer(A).

如果search_answer(A)未成功,则会失败(导致“否”),如果成功,则结果为A

如果您希望将结果作为列表中的答案,则可以执行以下操作:

found_list([A]) :-
    search_answer(A).

我不确定其中任何一个的价值是多少。第一个found_list/1只是search_answer/1上的一个简单包装器,没有任何其他逻辑。第二个只是从search_answer/1结果中生成一个单元素列表。如果A已经是列表,则不需要将其放在括号内([...]),否则您只需在列表中获取列表。我怀疑你真的想做别的事,但没有解释。

<小时/> 在回复更新的问题时,如果A是一个简单的未绑定术语,则以下代码应该有效:

found_list(A) :-
    search_answer(A),
    is_list(A).

但是,如果is_list/1的参数具有列表结构,即使它的元素可能未绑定,| ?- X = [_], is_list(X). X = [_] yes | ?- 也会成功:

search_answer(A)

因此,举例来说,如果A = [_]成功found_list(A),则A = [_]会以ground/1取代。

| ?- ground(X). no | ?- ground([_|_]). no | ?- ground([a,b]). yes | ?- 在这里非常有用:

found_list(A) :-
    search_answer(A),
    ground(A).

因此,以下解决方案应该有效:

search_answer(A)

<小时/> 如果您的意图不是A如果found_list/1不合理,但只是失败,那么您可以将found_list(A) :- search_answer(A), ( ground(A) -> true ; !, false ). 实施为:

var popup, x, f31, f32, f33, f4, f5, f6, f7, f7a, f81, f82, f11, f14, f161, f17a1;

function _(x){
    return document.getElementById(x);
}

//fungsi tutup popup
function tutupPopup(){
    _("popup").style.display = "none";
}

function prosesc11(){
    f31 = _("f31").value;
    f32 = _("f32").value;
    f33 = _("f33").value;
    $.ajax({
        url    : "<?php echo base_url().'index.php/TracerStudy_model/simpan_data_ts';?>",
        type   : 'post',
        data   : {'f31' : f31, 'f32' : f32},
        success: function(data){
            console.log(data);
        }
    });

    if(f31.length>0||f32.length>0){
        _("formc1-1").style.display = "none";
        _("formc1-2").style.display = "block";
        _("progressBar").value = 50;
    }else{
        alert("Maaf data anda ada yang belum diisi.")
    }
}

我认为,但是代码可能存在一个更基本的问题,因为它不应该有你觉得有必要像这样解决的行为。