How to know if a Peano number is even










1















So I'm having a hard time trying with Peano and I need some help. I want to know if a Peano number is even and if yes then add:



0 + s(s(0)) = s(s(0))
0 + s(0) = No because one of the numbers odd


The code I have so far:



s(0).
s(X):-
X.

add(0,Y,Y).
add(s(X), Y, s(Z)):-
add(X,Y,Z).









share|improve this question



















  • 1





    Your s/1 predicate is not necessary. It's a source of confusion for beginners that Prolog structures and Prolog predicates have the same shape, but they are not the same thing. For Peano numbers, you need s/1 as a structure or functor, not as a predicate.

    – Daniel Lyons
    Nov 15 '18 at 20:10















1















So I'm having a hard time trying with Peano and I need some help. I want to know if a Peano number is even and if yes then add:



0 + s(s(0)) = s(s(0))
0 + s(0) = No because one of the numbers odd


The code I have so far:



s(0).
s(X):-
X.

add(0,Y,Y).
add(s(X), Y, s(Z)):-
add(X,Y,Z).









share|improve this question



















  • 1





    Your s/1 predicate is not necessary. It's a source of confusion for beginners that Prolog structures and Prolog predicates have the same shape, but they are not the same thing. For Peano numbers, you need s/1 as a structure or functor, not as a predicate.

    – Daniel Lyons
    Nov 15 '18 at 20:10













1












1








1








So I'm having a hard time trying with Peano and I need some help. I want to know if a Peano number is even and if yes then add:



0 + s(s(0)) = s(s(0))
0 + s(0) = No because one of the numbers odd


The code I have so far:



s(0).
s(X):-
X.

add(0,Y,Y).
add(s(X), Y, s(Z)):-
add(X,Y,Z).









share|improve this question
















So I'm having a hard time trying with Peano and I need some help. I want to know if a Peano number is even and if yes then add:



0 + s(s(0)) = s(s(0))
0 + s(0) = No because one of the numbers odd


The code I have so far:



s(0).
s(X):-
X.

add(0,Y,Y).
add(s(X), Y, s(Z)):-
add(X,Y,Z).






prolog successor-arithmetics






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 18 '18 at 21:40









false

11.5k772148




11.5k772148










asked Nov 15 '18 at 19:10









lk009lk009

246




246







  • 1





    Your s/1 predicate is not necessary. It's a source of confusion for beginners that Prolog structures and Prolog predicates have the same shape, but they are not the same thing. For Peano numbers, you need s/1 as a structure or functor, not as a predicate.

    – Daniel Lyons
    Nov 15 '18 at 20:10












  • 1





    Your s/1 predicate is not necessary. It's a source of confusion for beginners that Prolog structures and Prolog predicates have the same shape, but they are not the same thing. For Peano numbers, you need s/1 as a structure or functor, not as a predicate.

    – Daniel Lyons
    Nov 15 '18 at 20:10







1




1





Your s/1 predicate is not necessary. It's a source of confusion for beginners that Prolog structures and Prolog predicates have the same shape, but they are not the same thing. For Peano numbers, you need s/1 as a structure or functor, not as a predicate.

– Daniel Lyons
Nov 15 '18 at 20:10





Your s/1 predicate is not necessary. It's a source of confusion for beginners that Prolog structures and Prolog predicates have the same shape, but they are not the same thing. For Peano numbers, you need s/1 as a structure or functor, not as a predicate.

– Daniel Lyons
Nov 15 '18 at 20:10












1 Answer
1






active

oldest

votes


















1














Do not think about Peano numbers as numbers but as symbols.



Realize that the even Paeno numbers are 0 and a repeat of the pattern s(s(X)) where X can be 0 or the pattern s(s(X))



Also I look at 0 and s(0) etc. as data, and you are using s as a predicate name. I am not saying it will not work this way, but that is not how I think about this.



The name of the predicate is paeno_even and it takes one argument.



The base case is



paeno_even(0).


next for recursive case



paeno_even(P)


and the processing on P just removes s(s(X)) so do that in the head as



paeno_even(s(s(X)))


and then just do the recursive call



paeno_even(s(s(X))) :-
paeno_even(X).


A few test to demonstrate:



?- paeno_even(0).
true.

?- paeno_even(s(0)).
false.

?- paeno_even(s(s(0))).
true.

?- paeno_even(s(s(s(0)))).
false.


The entire code as one snippet:



paeno_even(0).
paeno_even(s(s(X))) :-
paeno_even(X).





share|improve this answer























  • I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

    – lk009
    Nov 15 '18 at 19:35










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',
autoActivateHeartbeat: false,
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
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53326410%2fhow-to-know-if-a-peano-number-is-even%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














Do not think about Peano numbers as numbers but as symbols.



Realize that the even Paeno numbers are 0 and a repeat of the pattern s(s(X)) where X can be 0 or the pattern s(s(X))



Also I look at 0 and s(0) etc. as data, and you are using s as a predicate name. I am not saying it will not work this way, but that is not how I think about this.



The name of the predicate is paeno_even and it takes one argument.



The base case is



paeno_even(0).


next for recursive case



paeno_even(P)


and the processing on P just removes s(s(X)) so do that in the head as



paeno_even(s(s(X)))


and then just do the recursive call



paeno_even(s(s(X))) :-
paeno_even(X).


A few test to demonstrate:



?- paeno_even(0).
true.

?- paeno_even(s(0)).
false.

?- paeno_even(s(s(0))).
true.

?- paeno_even(s(s(s(0)))).
false.


The entire code as one snippet:



paeno_even(0).
paeno_even(s(s(X))) :-
paeno_even(X).





share|improve this answer























  • I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

    – lk009
    Nov 15 '18 at 19:35















1














Do not think about Peano numbers as numbers but as symbols.



Realize that the even Paeno numbers are 0 and a repeat of the pattern s(s(X)) where X can be 0 or the pattern s(s(X))



Also I look at 0 and s(0) etc. as data, and you are using s as a predicate name. I am not saying it will not work this way, but that is not how I think about this.



The name of the predicate is paeno_even and it takes one argument.



The base case is



paeno_even(0).


next for recursive case



paeno_even(P)


and the processing on P just removes s(s(X)) so do that in the head as



paeno_even(s(s(X)))


and then just do the recursive call



paeno_even(s(s(X))) :-
paeno_even(X).


A few test to demonstrate:



?- paeno_even(0).
true.

?- paeno_even(s(0)).
false.

?- paeno_even(s(s(0))).
true.

?- paeno_even(s(s(s(0)))).
false.


The entire code as one snippet:



paeno_even(0).
paeno_even(s(s(X))) :-
paeno_even(X).





share|improve this answer























  • I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

    – lk009
    Nov 15 '18 at 19:35













1












1








1







Do not think about Peano numbers as numbers but as symbols.



Realize that the even Paeno numbers are 0 and a repeat of the pattern s(s(X)) where X can be 0 or the pattern s(s(X))



Also I look at 0 and s(0) etc. as data, and you are using s as a predicate name. I am not saying it will not work this way, but that is not how I think about this.



The name of the predicate is paeno_even and it takes one argument.



The base case is



paeno_even(0).


next for recursive case



paeno_even(P)


and the processing on P just removes s(s(X)) so do that in the head as



paeno_even(s(s(X)))


and then just do the recursive call



paeno_even(s(s(X))) :-
paeno_even(X).


A few test to demonstrate:



?- paeno_even(0).
true.

?- paeno_even(s(0)).
false.

?- paeno_even(s(s(0))).
true.

?- paeno_even(s(s(s(0)))).
false.


The entire code as one snippet:



paeno_even(0).
paeno_even(s(s(X))) :-
paeno_even(X).





share|improve this answer













Do not think about Peano numbers as numbers but as symbols.



Realize that the even Paeno numbers are 0 and a repeat of the pattern s(s(X)) where X can be 0 or the pattern s(s(X))



Also I look at 0 and s(0) etc. as data, and you are using s as a predicate name. I am not saying it will not work this way, but that is not how I think about this.



The name of the predicate is paeno_even and it takes one argument.



The base case is



paeno_even(0).


next for recursive case



paeno_even(P)


and the processing on P just removes s(s(X)) so do that in the head as



paeno_even(s(s(X)))


and then just do the recursive call



paeno_even(s(s(X))) :-
paeno_even(X).


A few test to demonstrate:



?- paeno_even(0).
true.

?- paeno_even(s(0)).
false.

?- paeno_even(s(s(0))).
true.

?- paeno_even(s(s(s(0)))).
false.


The entire code as one snippet:



paeno_even(0).
paeno_even(s(s(X))) :-
paeno_even(X).






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 15 '18 at 19:30









Guy CoderGuy Coder

15.9k44187




15.9k44187












  • I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

    – lk009
    Nov 15 '18 at 19:35

















  • I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

    – lk009
    Nov 15 '18 at 19:35
















I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

– lk009
Nov 15 '18 at 19:35





I find i way to do it too, but yours is way better. I was substracting s(s(0)) to the number an call recursive to the function.

– lk009
Nov 15 '18 at 19:35



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53326410%2fhow-to-know-if-a-peano-number-is-even%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Top Tejano songwriter Luis Silva dead of heart attack at 64

政党

天津地下鉄3号線