Se você fosse escrever um mecanismo de jogo de xadrez, que paradigma de programação você usaria (OOP, procedural etc.) e por que você o escolheria? Por mecanismo de xadrez, quero dizer a parte de um programa que avalia a placa atual e decide a próxima jogada do computador.
Estou perguntando, porque achei que seria divertido escrever um mecanismo de xadrez. Ocorreu-me que eu poderia usá-lo como um projeto para aprender programação funcional. Ocorreu-me então que alguns problemas não são adequados ao paradigma funcional. Ocorreu-me então que isso poderia ser uma boa discussão.
Respostas:
Até onde eu sei, a avaliação não é um problema paralelizável, mas avaliar diferentes cadeias é, então eu definitivamente a escreveria para fazer uso de múltiplos núcleos e multithreading.
Quer você seja funcional ou semi-funcional, é uma questão de gosto. Pessoalmente, eu faria OOP e usaria o suporte para programação funcional e paralelização que existe, por exemplo, em C #
Em uma nota de rodapé, se eu escrevesse um mecanismo de xadrez, tentaria criar um que realmente pudesse "pensar" no xadrez. Usando a avaliação do tabuleiro para a força bruta, todas as combinações possíveis foram feitas até a morte e extremamente bem, mas não houve muito progresso no desenvolvimento de um mecanismo de xadrez mais pensado / confuso. Isso seria um desafio! :)
Encontre alguns jogos com jogadas de posição realmente complicadas e movimentos fortes (marcados! Ou !!) e use-os para treinar e testar seu motor.
fonte
Eu acho que depende de seus objetivos, que eu tomo são estritamente didáticos. Se você estava tentando escrever um produto competitivo, desejaria eficiência máxima nos avaliadores de nível mais baixo. Muitas oportunidades para o paralelismo no nível de bits aqui. Também muitas oportunidades para tabelas de hash. Também oportunidades para explorar o paralelismo. Então, nos níveis mais altos, você provavelmente deseja um sistema bom para IA, o que provavelmente significa um idioma de programação funcional. Obviamente, você não deseja fazer todas essas coisas, escolher uma ou duas delas e se contentar com o fato de que seu projeto não será competitivo com os melhores programas.
fonte
Eu escolhi o paradigma OOP no meu mecanismo de xadrez chamado The Turk . A primeira versão do meu mecanismo de xadrez foi escrita mais processual do que OOP.Então, achei muito difícil melhorar meu mecanismo de xadrez por causa dos longos blocos de código e do design deficiente.
Depende do que você deseja obter ao escrever o mecanismo de xadrez. Se você deseja criar um mecanismo de xadrez muito forte, não é possível fazer isso em idiomas OOP por causa de ligações tardias lentas. Se você quer apenas aprender programação e também se divertir escrevendo motor de xadrez, então as linguagens gerenciadas e o OOP serão seus amigos. Eu posso sugerir que você escolha C # porque também é possível escrever um mecanismo de xadrez de maneira mais processual.
fonte
Criei um programa simples de xadrez como meio de aprender a quarta língua. Acabou sendo um ótimo ajuste para esse problema imperativo, e eu aprendi muito. A pilha aberta me permitiu implementar a pesquisa alfa-beta de uma maneira única, o que me proporcionou uma maior compreensão do algoritmo.
Alguém poderia pensar que a programação funcional seria ótima para programas de xadrez, uma vez que os algoritmos principais (pesquisa alfa-beta em profundidade, primeira avaliação, avaliação) são recursivos e funcionalmente rigorosos. No entanto, um programa de xadrez vive e morre com eficiência e nenhuma das culturas atuais de linguagens funcionais tem esse objetivo. Os cem principais mecanismos de ponta usam linguagens imperativas (principalmente C / C ++ e depois Delphi) para ter o máximo controle sobre o uso da memória, multiencadeamento, estado global e geração de código. Todas as linguagens funcionais usam alocação dinâmica de memória para estruturas de dados principais, que são a morte de um programa de xadrez.
Ainda gostaria que alguém tentasse invadir os 100 principais mecanismos de xadrez usando uma linguagem funcional.
fonte