Prolog is a must. Cualquier otro lenguaje de un paradigma diferente sería un buen comienzo. Prolog es de un paradigma lógico. Otro lenguaje genial pero muy diferente es Scheme. Es de la familia del lenguaje funcional.
Aquí hay algunas muestras de un validador Palindrome.
EDITAR: Alguien mencionó que el código que escribí es poco impresionante y desalentador. He aquí algunos ejemplos simplificados:
esquema factorial
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))
Prolog factorial
factorial(0,1).
factorial(N,F) :-
N>0,
N1 is N-1,
factorial(N1,F1),
F is N * F1.
Y mis ejemplos originales:
Prolog muestra:
:- set_prolog_flag(toplevel_print_options, [quoted(true), portray(true), max_depth(0), attributes(portray)]).
readline(Line) :-
get0(Ch),
readline(Ch, Line),
!.
readline(10, []).
readline(Ch, [LowerCasedCh | RestOfLine]) :-
is_alpha(Ch),
name(N, [Ch]),
downcase_atom(N, LowerCasedN),
%Drops element down to lowercase
name(LowerCasedN, [LowerCasedCh]),
get0(NextCh),
readline(NextCh, RestOfLine).
%Character Trimming
readline(Ch, RestOfLine) :-
\+is_alpha(Ch),
get0(NextCh),
readline(NextCh, RestOfLine).
palindrome:-
readline(List),
sarahPalindrome(List).
sarahPalindrome(List):-
reverse(List, ReversedList),
List = ReversedList.
Su ¡Es una solución en esquema para el mismo problema!
(define palindrome
(lambda (x)
(equal? (filter-non-char-alpha (reverse (string->list x))) (filter-non-char-alpha (string->list x))
)
)
)
(define filter-non-char-alpha
(lambda (x)
(if (equal? x '()) #t
(if (char-alphabetic? (car x))
(cons (char-downcase (car x)) (filter-non-char-alpha (cdr x)))
(filter-non-char-alpha (cdr x))
)
)
)
)
haz que sea una "wiki de la comunidad" – Etan
hola, acabo de hacerla wiki comunitario. por cierto ... ¿qué es Wiki de la comunidad? lol – sivabudh
"¿Qué es Wiki de la comunidad?" - ver http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-stack-overflow – ChrisW