Code Comments
Programming Forum and web based access to our favorite programming groups.I'm a prolog newbie and I'm trying to get some practice. What I would like to do is create a rule that will permute a list. I'm trying to get something to work sort of like this: car_row(X) :- permute([red,blue,green,yellow],H), permute([john,bill,mary,sue], P), join(H,P,X). X would then be a list that might contain: [car(yellow,bill), car(red,sue), car(blue,mary), car(green, john)] I'm trying to use the select rule to make the first element of the permuted list any element of the original list with the rest being a permutation of the remaining elements of the original list, but so far I'm having no luck. I would think that I could do this by defining permute to recursively permute the remaining elements in the list sort of like this: permute([],[]). permute(X,H) :- select(A,X,Rest), <Put A in H>, <select/permute from Rest>. I amas to how I get H to 'fill up' with all of the values that were selected. The join rule above will just be used to join the 2 lists together (I can handle that ;) ). Any help is appreciated!
Post Follow-up to this messageHow about : permute([],[]). permute(X,[A|H]) :- select(A,X,Rest), permute(Rest, H). "dirty_bit" <dod_xenozhar@hotmail.com> wrote in message news:4d0ff9ea.0412051737.6a2fc468@posting.google.com... > I'm a prolog newbie and I'm trying to get some practice. What I would > like to do is create a rule that will permute a list. I'm trying to > get something to work sort of like this: > > car_row(X) :- permute([red,blue,green,yellow],H), > permute([john,bill,mary,sue], P), join(H,P,X). > > X would then be a list that might contain: > [car(yellow,bill), car(red,sue), car(blue,mary), car(green, john)] > > I'm trying to use the select rule to make the first element of the > permuted list any element of the original list with the rest being a > permutation of the remaining elements of the original list, but so far > I'm having no luck. I would think that I could do this by defining > permute to recursively permute the remaining elements in the list sort > of like this: > > permute([],[]). > permute(X,H) :- select(A,X,Rest), <Put A in H>, <select/permute from > Rest>. > > I amas to how I get H to 'fill up' with all of the values > that were selected. > > The join rule above will just be used to join the 2 lists together (I > can handle that ;) ). > > Any help is appreciated!
Post Follow-up to this messagedirty_bit wrote: > I'm a prolog newbie and I'm trying to get some practice. What I would > like to do is create a rule that will permute a list. I'm trying to > get something to work sort of like this: > > car_row(X) :- permute([red,blue,green,yellow],H), > permute([john,bill,mary,sue], P), join(H,P,X). > > X would then be a list that might contain: > [car(yellow,bill), car(red,sue), car(blue,mary), car(green, john)] > I think this is a very good first draft. But a rule is merely a declarative sentence and, as such, doesn't "do" anything. Given a list of rules and a question, the Prolog Inference Engine will find all of the answers that the given list of rules supplies to the given question. For the PIE to derive any answers from the rule > car_row(X) :- permute([red,blue,green,yellow],H), > permute([john,bill,mary,sue], P), join(H,P,X). it will have to know what you mean by 'permute/2' and 'join/3'. > I'm trying to use the select rule to make the first element of the > permuted list any element of the original list with the rest being a > permutation of the remaining elements of the original list, but so far > I'm having no luck. I would think that I could do this by defining > permute to recursively permute the remaining elements in the list sort > of like this: > > permute([],[]). > permute(X,H) :- select(A,X,Rest), <Put A in H>, <select/permute from > Rest>. > > I amas to how I get H to 'fill up' with all of the values > that were selected. > permute([],[]). permute(X,H) :- select(A,X,Rest), H=[A|Something], <select/permute Something from Rest>. ? Try it! -- billh
Post Follow-up to this messagePowered by vBulletin
Copyright 2000-2006 Jelsoft Enterprises Limited.