Prolog: own Implementation of member fails / general Prolog problem











up vote
-1
down vote

favorite












So I am new to Prolog and have implemented my own implementation of member.



#contains element
mymember(A, [A|T]).
mymember(A, [X|T]) :- mymember(A, T).


After looking up this should be the classical implementation, but when I test it, it fails:



[trace]  ?- mymember(2, [1, 2, 3]).
Call: (8) mymember(2, [1, 2, 3]) ?
Call: (9) mymember(2, [2, 3]) ?
Call: (10) mymember(2, [3]) ?
Call: (11) mymember(2, ) ?
Fail: (11) mymember(2, ) ?
Fail: (10) mymember(2, [3]) ?
Fail: (9) mymember(2, [2, 3]) ?
Fail: (8) mymember(2, [1, 2, 3]) ?
false.


Now what confuses me is that Prolog only uses the second case until it fails but never tries to match my first case. Does anybody know the reason of this behavior?



(I'm using SWI-Prolog Version 7.6.4)





EDIT: Well now I know what my problem was. Since I don't have syntax highlighting I didn't notice that I actually didn't use the correct character for one line comments. After replacing '#' with '%' my first case now matches in the second call. A typical beginner mistake I guess...










share|improve this question









New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • This works for me locally. Did you reload your file, or is there something else in your file that results in the file being wrongly interpreted?
    – Willem Van Onsem
    2 days ago










  • Based upon the code you're showing, the second step going to the third step in the trace doesn't make sense. So double check your code. Are you sure what you are showing here is what you entered and tested?
    – lurker
    2 days ago

















up vote
-1
down vote

favorite












So I am new to Prolog and have implemented my own implementation of member.



#contains element
mymember(A, [A|T]).
mymember(A, [X|T]) :- mymember(A, T).


After looking up this should be the classical implementation, but when I test it, it fails:



[trace]  ?- mymember(2, [1, 2, 3]).
Call: (8) mymember(2, [1, 2, 3]) ?
Call: (9) mymember(2, [2, 3]) ?
Call: (10) mymember(2, [3]) ?
Call: (11) mymember(2, ) ?
Fail: (11) mymember(2, ) ?
Fail: (10) mymember(2, [3]) ?
Fail: (9) mymember(2, [2, 3]) ?
Fail: (8) mymember(2, [1, 2, 3]) ?
false.


Now what confuses me is that Prolog only uses the second case until it fails but never tries to match my first case. Does anybody know the reason of this behavior?



(I'm using SWI-Prolog Version 7.6.4)





EDIT: Well now I know what my problem was. Since I don't have syntax highlighting I didn't notice that I actually didn't use the correct character for one line comments. After replacing '#' with '%' my first case now matches in the second call. A typical beginner mistake I guess...










share|improve this question









New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • This works for me locally. Did you reload your file, or is there something else in your file that results in the file being wrongly interpreted?
    – Willem Van Onsem
    2 days ago










  • Based upon the code you're showing, the second step going to the third step in the trace doesn't make sense. So double check your code. Are you sure what you are showing here is what you entered and tested?
    – lurker
    2 days ago















up vote
-1
down vote

favorite









up vote
-1
down vote

favorite











So I am new to Prolog and have implemented my own implementation of member.



#contains element
mymember(A, [A|T]).
mymember(A, [X|T]) :- mymember(A, T).


After looking up this should be the classical implementation, but when I test it, it fails:



[trace]  ?- mymember(2, [1, 2, 3]).
Call: (8) mymember(2, [1, 2, 3]) ?
Call: (9) mymember(2, [2, 3]) ?
Call: (10) mymember(2, [3]) ?
Call: (11) mymember(2, ) ?
Fail: (11) mymember(2, ) ?
Fail: (10) mymember(2, [3]) ?
Fail: (9) mymember(2, [2, 3]) ?
Fail: (8) mymember(2, [1, 2, 3]) ?
false.


Now what confuses me is that Prolog only uses the second case until it fails but never tries to match my first case. Does anybody know the reason of this behavior?



(I'm using SWI-Prolog Version 7.6.4)





EDIT: Well now I know what my problem was. Since I don't have syntax highlighting I didn't notice that I actually didn't use the correct character for one line comments. After replacing '#' with '%' my first case now matches in the second call. A typical beginner mistake I guess...










share|improve this question









New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











So I am new to Prolog and have implemented my own implementation of member.



#contains element
mymember(A, [A|T]).
mymember(A, [X|T]) :- mymember(A, T).


After looking up this should be the classical implementation, but when I test it, it fails:



[trace]  ?- mymember(2, [1, 2, 3]).
Call: (8) mymember(2, [1, 2, 3]) ?
Call: (9) mymember(2, [2, 3]) ?
Call: (10) mymember(2, [3]) ?
Call: (11) mymember(2, ) ?
Fail: (11) mymember(2, ) ?
Fail: (10) mymember(2, [3]) ?
Fail: (9) mymember(2, [2, 3]) ?
Fail: (8) mymember(2, [1, 2, 3]) ?
false.


Now what confuses me is that Prolog only uses the second case until it fails but never tries to match my first case. Does anybody know the reason of this behavior?



(I'm using SWI-Prolog Version 7.6.4)





EDIT: Well now I know what my problem was. Since I don't have syntax highlighting I didn't notice that I actually didn't use the correct character for one line comments. After replacing '#' with '%' my first case now matches in the second call. A typical beginner mistake I guess...







prolog






share|improve this question









New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday





















New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 days ago









slukas

11




11




New contributor




slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






slukas is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • This works for me locally. Did you reload your file, or is there something else in your file that results in the file being wrongly interpreted?
    – Willem Van Onsem
    2 days ago










  • Based upon the code you're showing, the second step going to the third step in the trace doesn't make sense. So double check your code. Are you sure what you are showing here is what you entered and tested?
    – lurker
    2 days ago




















  • This works for me locally. Did you reload your file, or is there something else in your file that results in the file being wrongly interpreted?
    – Willem Van Onsem
    2 days ago










  • Based upon the code you're showing, the second step going to the third step in the trace doesn't make sense. So double check your code. Are you sure what you are showing here is what you entered and tested?
    – lurker
    2 days ago


















This works for me locally. Did you reload your file, or is there something else in your file that results in the file being wrongly interpreted?
– Willem Van Onsem
2 days ago




This works for me locally. Did you reload your file, or is there something else in your file that results in the file being wrongly interpreted?
– Willem Van Onsem
2 days ago












Based upon the code you're showing, the second step going to the third step in the trace doesn't make sense. So double check your code. Are you sure what you are showing here is what you entered and tested?
– lurker
2 days ago






Based upon the code you're showing, the second step going to the third step in the trace doesn't make sense. So double check your code. Are you sure what you are showing here is what you entered and tested?
– lurker
2 days ago














1 Answer
1






active

oldest

votes

















up vote
0
down vote













Your implementations works for me.



mymember(2,[1,2,3]).
Call: (8) mymember(2, [1, 2, 3]) ? creep
Call: (9) mymember(2, [2, 3]) ? creep
Exit: (9) mymember(2, [2, 3]) ? creep
Exit: (8) mymember(2, [1, 2, 3]) ? creep
true .


Though you could lose some of the variables as they are singletons, like this:



mymember(A, [A|_]).
mymember(A, [_|T]) :- mymember(A, T).





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });






    slukas is a new contributor. Be nice, and check out our Code of Conduct.










     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53238586%2fprolog-own-implementation-of-member-fails-general-prolog-problem%23new-answer', 'question_page');
    }
    );

    Post as a guest
































    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    Your implementations works for me.



    mymember(2,[1,2,3]).
    Call: (8) mymember(2, [1, 2, 3]) ? creep
    Call: (9) mymember(2, [2, 3]) ? creep
    Exit: (9) mymember(2, [2, 3]) ? creep
    Exit: (8) mymember(2, [1, 2, 3]) ? creep
    true .


    Though you could lose some of the variables as they are singletons, like this:



    mymember(A, [A|_]).
    mymember(A, [_|T]) :- mymember(A, T).





    share|improve this answer

























      up vote
      0
      down vote













      Your implementations works for me.



      mymember(2,[1,2,3]).
      Call: (8) mymember(2, [1, 2, 3]) ? creep
      Call: (9) mymember(2, [2, 3]) ? creep
      Exit: (9) mymember(2, [2, 3]) ? creep
      Exit: (8) mymember(2, [1, 2, 3]) ? creep
      true .


      Though you could lose some of the variables as they are singletons, like this:



      mymember(A, [A|_]).
      mymember(A, [_|T]) :- mymember(A, T).





      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        Your implementations works for me.



        mymember(2,[1,2,3]).
        Call: (8) mymember(2, [1, 2, 3]) ? creep
        Call: (9) mymember(2, [2, 3]) ? creep
        Exit: (9) mymember(2, [2, 3]) ? creep
        Exit: (8) mymember(2, [1, 2, 3]) ? creep
        true .


        Though you could lose some of the variables as they are singletons, like this:



        mymember(A, [A|_]).
        mymember(A, [_|T]) :- mymember(A, T).





        share|improve this answer












        Your implementations works for me.



        mymember(2,[1,2,3]).
        Call: (8) mymember(2, [1, 2, 3]) ? creep
        Call: (9) mymember(2, [2, 3]) ? creep
        Exit: (9) mymember(2, [2, 3]) ? creep
        Exit: (8) mymember(2, [1, 2, 3]) ? creep
        true .


        Though you could lose some of the variables as they are singletons, like this:



        mymember(A, [A|_]).
        mymember(A, [_|T]) :- mymember(A, T).






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 2 days ago









        Richard Ardelean

        912




        912






















            slukas is a new contributor. Be nice, and check out our Code of Conduct.










             

            draft saved


            draft discarded


















            slukas is a new contributor. Be nice, and check out our Code of Conduct.













            slukas is a new contributor. Be nice, and check out our Code of Conduct.












            slukas is a new contributor. Be nice, and check out our Code of Conduct.















             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53238586%2fprolog-own-implementation-of-member-fails-general-prolog-problem%23new-answer', 'question_page');
            }
            );

            Post as a guest




















































































            Popular posts from this blog

            Florida Star v. B. J. F.

            Danny Elfman

            Lugert, Oklahoma