Merge pull request #208 from robertogeb/patch-2

Major changes to better adapt to spanish grammar and better match the english text.
This commit is contained in:
Pavol Zibrita 2012-04-02 20:00:07 -07:00
commit daf01f679b

View file

@ -7,63 +7,77 @@ preamble - [].
%% TURNS %% TURNS
turn('left', ['gira a izquierda ']).
turn('left', ['gira a la izquierda ']).
turn('left_sh', ['gira fuerte a la izquierda ']). turn('left_sh', ['gira fuerte a la izquierda ']).
turn('left_sl', ['gira leve a la izquierda ']). turn('left_sl', ['gira levemente a la izquierda ']).
turn('right', ['gira a la derecha ']). turn('right', ['gira a la derecha ']).
turn('right_sh', ['gira fuerte a la derecha ']). turn('right_sh', ['gira fuerte a la derecha ']).
turn('right_sl', ['gira leve a la derecha ']). turn('right_sl', ['gira levemente a la derecha ']).
prepare_turn(Turn, Dist) == ['Tras', D,' prepararse para ', M] :- distance(Dist) == D, turn(Turn, M). turn_inf('left', ['girar a la izquierda ']).
turn_inf('left_sh', ['girar fuerte a la izquierda ']).
turn_inf('left_sl', ['girar levemente a la izquierda ']).
turn_inf('right', ['girar a la derecha ']).
turn_inf('right_sh', ['girar fuerte a la derecha ']).
turn_inf('right_sl', ['girar levemente a la derecha ']).
prepare_turn(Turn, Dist) == ['Prepárate para ', M, ' tras ', D] :- distance(Dist) == D, turn_inf(Turn, M).
turn(Turn, Dist) == ['Tras ', D, M] :- distance(Dist) == D, turn(Turn, M). turn(Turn, Dist) == ['Tras ', D, M] :- distance(Dist) == D, turn(Turn, M).
turn(Turn) == M :- turn(Turn, M). turn(Turn) == M :- turn(Turn, M).
prepare_make_ut(Dist) == [ 'Tras ', D,' prepararse para dar la vuelta'] :- distance(Dist) == D. prepare_make_ut(Dist) == [ 'Prepárate para dar la vuelta tras ', D] :- distance(Dist) == D.
make_ut(Dist) == [' Tras', D, ' da la vuelta'] :- distance(Dist) == D. make_ut(Dist) == ['Tras ', D, ' da la vuelta'] :- distance(Dist) == D.
make_ut == ['da la vuelta']. make_ut == ['Da la vuelta'].
make_ut_wp == ['Cuando sea posible, da la vuelta']. make_ut_wp == ['Cuando sea posible, da la vuelta'].
prepare_roundabout(Dist) == [ 'Tras ', D,' prepararse para entrar en la rotonda'] :- distance(Dist) == D. prepare_roundabout(Dist) == [ 'Prepárate para entrar en la rotonda tras ', D] :- distance(Dist) == D.
roundabout(Dist, _Angle, Exit) == ['Tras ', D, ' entra en la rotonda y toma la ', E ] :- distance(Dist) == D, nth(Exit, E). roundabout(Dist, _Angle, Exit) == ['Tras ', D, ' entra en la rotonda y toma la ', E, ' salida' ] :- distance(Dist) == D, nth(Exit, E).
roundabout(_Angle, Exit) == ['toma la ', E ] :- nth(Exit, E). roundabout(_Angle, Exit) == ['toma la ', E, ' salida' ] :- nth(Exit, E).
go_ahead == ['Continue así '].
go_ahead(Dist) == ['Continue por ', D]:- distance(Dist) == D.
and_arrive_destination == ['y llegará a su destino']. go_ahead == ['Continúa recto'].
go_ahead(Dist) == ['Sigue la vía durante ', D]:- distance(Dist) == D.
then == ['Luego '].
reached_destination == ['ha llegado a su destino'].
bear_right == ['manténga a la derecha'].
bear_left == ['manténga a la izquierda'].
route_new_calc(Dist) == ['El viaje es ', D] :- distance(Dist) == D. and_arrive_destination == ['y llegarás a tu destino'].
route_recalc(Dist) == ['Ruta recalculada, el viaje es ', D] :- distance(Dist) == D.
then == ['. Luego '].
reached_destination == ['has llegado a tu destino'].
bear_right == ['mantente a la derecha'].
bear_left == ['mantente a la izquierda'].
route_new_calc(Dist) == ['El camino es ', D] :- distance(Dist) == D.
route_recalc(Dist) == ['Ruta recalculada, distancia ', D] :- distance(Dist) == D.
location_lost == ['señal g p s perdida ']. location_lost == ['señal g p s perdida '].
%% %%
nth(1, 'primera salida').
nth(2, 'segunda salida'). nth(1, 'primera').
nth(3, 'tercera salida'). nth(2, 'segunda').
nth(4, 'cuarta salida'). nth(3, 'tercera').
nth(5, 'quinta salida'). nth(4, 'cuarta').
nth(6, 'sexta salida'). nth(5, 'quinta').
nth(7, 'séptima salida'). nth(6, 'sexta').
nth(8, 'octava salida'). nth(7, 'séptima').
nth(9, 'novena salida'). nth(8, 'octava').
nth(10, 'décima salida'). nth(9, 'novena').
nth(11, 'undécima salida'). nth(10, 'décima').
nth(12, 'duodécima salida'). nth(11, 'undécima').
nth(13, 'decimotercera salida'). nth(12, 'duodécima').
nth(14, 'decimocuarta salida'). nth(13, 'decimotercera').
nth(15, 'decimoquinta salida'). nth(14, 'decimocuarta').
nth(16, 'decimosexta salida'). nth(15, 'decimoquinta').
nth(17, 'decimoséptima salida'). nth(16, 'decimosexta').
nth(17, 'decimoséptima').
%%% distance measure %%% distance measure
distance(Dist) == [ X, ' metros'] :- Dist < 100, D is round(Dist/10)*10, num_atom(D, X). distance(Dist) == [ X, ' metros'] :- Dist < 100, D is round(Dist/10)*10, num_atom(D, X).
distance(Dist) == [ X, ' metros'] :- Dist < 1000, D is round(2*Dist/100)*50, num_atom(D, X). distance(Dist) == [ X, ' metros'] :- Dist < 1000, D is round(2*Dist/100)*50, num_atom(D, X).
distance(Dist) == ['cerca de un kilómetro '] :- Dist < 1500. distance(Dist) == ['cerca de un kilómetro '] :- Dist < 1500.
@ -74,11 +88,13 @@ distance(Dist) == [ X, ' kilómetros '] :- D is round(Dist/1000), num_atom(D, X)
%% resolve command main method %% resolve command main method
%% if you are familar with Prolog you can input specific to the whole mechanism, %% if you are familar with Prolog you can input specific to the whole mechanism,
%% by adding exception cases. %% by adding exception cases.
flatten(X, Y) :- flatten(X, [], Y), !. flatten(X, Y) :- flatten(X, [], Y), !.
flatten([], Acc, Acc). flatten([], Acc, Acc).
flatten([X|Y], Acc, Res):- flatten(Y, Acc, R), flatten(X, R, Res). flatten([X|Y], Acc, Res):- flatten(Y, Acc, R), flatten(X, R, Res).
flatten(X, Acc, [X|Acc]). flatten(X, Acc, [X|Acc]).
resolve(X, Y) :- resolve_impl(X,Z), flatten(Z, Y). resolve(X, Y) :- resolve_impl(X,Z), flatten(Z, Y).
resolve_impl([],[]). resolve_impl([],[]).
resolve_impl([X|Rest], List) :- resolve_impl(Rest, Tail), ((X == L) -> append(L, Tail, List); List = Tail). resolve_impl([X|Rest], List) :- resolve_impl(Rest, Tail), ((X == L) -> append(L, Tail, List); List = Tail).