How to know if a Peano number is even
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
add a comment |
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
1
Yours/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 needs/1
as a structure or functor, not as a predicate.
– Daniel Lyons
Nov 15 '18 at 20:10
add a comment |
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
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
prolog successor-arithmetics
edited Nov 18 '18 at 21:40
false
11.5k772148
11.5k772148
asked Nov 15 '18 at 19:10
lk009lk009
246
246
1
Yours/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 needs/1
as a structure or functor, not as a predicate.
– Daniel Lyons
Nov 15 '18 at 20:10
add a comment |
1
Yours/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 needs/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
add a comment |
1 Answer
1
active
oldest
votes
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).
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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).
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
add a comment |
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).
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
add a comment |
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).
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).
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 needs/1
as a structure or functor, not as a predicate.– Daniel Lyons
Nov 15 '18 at 20:10