Является ли F # хорошим языком для карточного ИИ? [закрыто]

Я пишу игру в маджонг на C # (традиционная китайская игра, а не пасьянс). Во время написания кода для ИИ игрока-бота мне интересно, будет ли функциональный язык, такой как F #, более подходящим языком, чем тот, который я сейчас использую, - C # с большим количеством Linq. Я мало знаю о F #, поэтому я спрашиваю здесь.

Чтобы проиллюстрировать, что я пытаюсь решить, вот краткий обзор Маджонга:

Маджонг играет немного как Джин Рамми. У вас в руке 13 фишек, и каждый ход вы вытягиваете фишку и сбрасываете другую, пытаясь улучшить свою руку в направлении выигрышной руки маджонга, состоящей из 4 сетов и пары. Наборы могут представлять собой 3 вида (панги), 4 вида (конги) или последовательность из 3 последовательных плиток (чау). Вы также можете украсть сброс другого игрока, если он может завершить один из ваших сетов.

Код, который мне пришлось написать, чтобы определить, может ли бот объявить 3 последовательных набора плиток (чау), довольно утомителен. Я должен найти все уникальные плитки в руке, а затем начать проверять, есть ли последовательность из 3 плиток, которые содержат эту плитку в руке. Обнаружение, может ли бот уйти в маджонг, еще более сложно, поскольку это комбинация обнаружения, если есть 4 набора и пара в его руке. И это просто стандартная рука маджонга. Есть также многочисленные "специальные" руки, которые нарушают эти правила, но все еще являются рукой маджонга. Например, «13 уникальных чудес» состоит из 13 конкретных плиток, "Jade Empire" состоит только из плиток зеленого цвета и т. д.

В идеальном мире я бы хотел иметь возможность просто заявить «правила»; маджонга, и иметь возможность сопоставить набор из 13 плиток с этими правилами, чтобы выяснить, какие правила он выполняет, например, проверять, является ли он рукой маджонга или содержит 4 типа. Может ли это помочь решить проблему соответствия шаблону в F #?

Ответы на вопрос(2)

Я пытался создать ИИ с использованием Java раньше, основываясь на том, что я сделал в Прологе. Я думал, что это будет сукой, чтобы закодировать. Однако у меня была пара методов, которые выполняли большую часть тяжелой работы, исключая ее из основных методов, и она работала чудесно.

Возможно, вам придется заново изобрести колесо, но в C # не должно быть ничего такого, что вы можете сделать в F #.

примечание: я никогда раньше не слышал о F #, но он не может быть таким плохим. Я могу / не могу дуть из моей собственной задницы.

Решение Вопроса

они являются отличным способом написания игровых ИИ, а если нет, то задача изучения одного из них поможет вам вырасти и оставит вас лучшим программистом, чем вы были. (Я могу правдиво сказать то же самое для декларативных языков, подобных Prolog, и для динамических скриптовых / OO / мультипарадигмальных языков, таких как Ruby или Python! -).

Ваша задача, как вы ее описали, должна быть простой в любой из этих групп языков - так что выберите один и сделайте это! Мы все будем рады помочь с любыми вопросами, которые могут возникнуть в результате этих попыток (я лично не знаком с F # или Scala, но был бы рад помочь с Haskell, любым языком семейства ML, Scheme или Erlang - и аналогично для других групп ;-).

Серьезно: полное владение хотя бы одним языком в каждой широкой категории (процедурный, функциональный, декларативный / унификация предложения, реляционный, динамический / мультипарадигма и т. Д.) Делает васseriously лучший программист - кроме маджонга (и это классически популярная игра в итальянском регионе Романья, недалеко от моего родного города Болонья ;-), любая задача, которую можно добавить в свой список в этом отношении,well стоит предпринять !!!

Ваш ответ на вопрос