Problem with depth first search output in prolog
up vote
1
down vote
favorite
I have the following code:
s(a, b).
s(b, c).
goal(c).
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
When I enter the query:
solve(a, P).
It gives me :
P = [_,_,c] ?
yes
But I want the complete path e.g.
P = [a,b,c] ?
prolog
add a comment |
up vote
1
down vote
favorite
I have the following code:
s(a, b).
s(b, c).
goal(c).
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
When I enter the query:
solve(a, P).
It gives me :
P = [_,_,c] ?
yes
But I want the complete path e.g.
P = [a,b,c] ?
prolog
You mixed upNl
andN1
.
– Willem Van Onsem
Nov 9 at 9:32
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I have the following code:
s(a, b).
s(b, c).
goal(c).
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
When I enter the query:
solve(a, P).
It gives me :
P = [_,_,c] ?
yes
But I want the complete path e.g.
P = [a,b,c] ?
prolog
I have the following code:
s(a, b).
s(b, c).
goal(c).
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
When I enter the query:
solve(a, P).
It gives me :
P = [_,_,c] ?
yes
But I want the complete path e.g.
P = [a,b,c] ?
prolog
prolog
edited Nov 9 at 11:47
false
10.9k769141
10.9k769141
asked Nov 9 at 9:30
sosscs
706
706
You mixed upNl
andN1
.
– Willem Van Onsem
Nov 9 at 9:32
add a comment |
You mixed upNl
andN1
.
– Willem Van Onsem
Nov 9 at 9:32
You mixed up
Nl
and N1
.– Willem Van Onsem
Nov 9 at 9:32
You mixed up
Nl
and N1
.– Willem Van Onsem
Nov 9 at 9:32
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
In your predicate you use two variables that look similar (graphically):
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
Here Nl
(with a lowercase L) looks similar to N1
(with a one 1). In fact the Prolog interpreter recognizes that N1
is only used once, and raises a warning:
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
The N1
variable has nothing to do with the Nl
variable defined in the body, and thus remains ununified.
But that being said, if you really want to output here, you should use N
in the "path" construction, not N1
, since otherwise for solve(a, L)
, L
will start with b
, not a
, and will mention the last node (here c
) twice, so:
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
In your predicate you use two variables that look similar (graphically):
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
Here Nl
(with a lowercase L) looks similar to N1
(with a one 1). In fact the Prolog interpreter recognizes that N1
is only used once, and raises a warning:
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
The N1
variable has nothing to do with the Nl
variable defined in the body, and thus remains ununified.
But that being said, if you really want to output here, you should use N
in the "path" construction, not N1
, since otherwise for solve(a, L)
, L
will start with b
, not a
, and will mention the last node (here c
) twice, so:
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
add a comment |
up vote
1
down vote
accepted
In your predicate you use two variables that look similar (graphically):
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
Here Nl
(with a lowercase L) looks similar to N1
(with a one 1). In fact the Prolog interpreter recognizes that N1
is only used once, and raises a warning:
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
The N1
variable has nothing to do with the Nl
variable defined in the body, and thus remains ununified.
But that being said, if you really want to output here, you should use N
in the "path" construction, not N1
, since otherwise for solve(a, L)
, L
will start with b
, not a
, and will mention the last node (here c
) twice, so:
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
In your predicate you use two variables that look similar (graphically):
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
Here Nl
(with a lowercase L) looks similar to N1
(with a one 1). In fact the Prolog interpreter recognizes that N1
is only used once, and raises a warning:
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
The N1
variable has nothing to do with the Nl
variable defined in the body, and thus remains ununified.
But that being said, if you really want to output here, you should use N
in the "path" construction, not N1
, since otherwise for solve(a, L)
, L
will start with b
, not a
, and will mention the last node (here c
) twice, so:
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
In your predicate you use two variables that look similar (graphically):
solve( N, [N] ) :-
goal( N).
solve( N, [N1 | Sol] ) :-
s( N, Nl),
solve( Nl, Sol).
Here Nl
(with a lowercase L) looks similar to N1
(with a one 1). In fact the Prolog interpreter recognizes that N1
is only used once, and raises a warning:
?- ['file.pl'].
Warning: /tmp/file.pl:8:
Singleton variables: [N1]
true.
The N1
variable has nothing to do with the Nl
variable defined in the body, and thus remains ununified.
But that being said, if you really want to output here, you should use N
in the "path" construction, not N1
, since otherwise for solve(a, L)
, L
will start with b
, not a
, and will mention the last node (here c
) twice, so:
solve( N, [N] ) :-
goal( N).
solve(N, [N | Sol]) :-
s(N, Nl),
solve(Nl, Sol).
answered Nov 9 at 9:36
Willem Van Onsem
140k16132225
140k16132225
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
add a comment |
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
Thanks, that helped. What is your secrete for learning prolog? our instructor isn't teaching us much.
– sosscs
Nov 9 at 10:41
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
@sosscs: I think Learn Prolog Now! can be quite helpful.
– Willem Van Onsem
Nov 9 at 17:02
add a comment |
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%2f53223033%2fproblem-with-depth-first-search-output-in-prolog%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
You mixed up
Nl
andN1
.– Willem Van Onsem
Nov 9 at 9:32