Немного не по теме, но я использую это:
template<typename T>
constexpr int sgn(const T &a, const T &b) noexcept{
return (a > b) - (a < b);
}
template<typename T>
constexpr int sgn(const T &a) noexcept{
return sgn(a, T(0));
}
и я обнаружил, что первая функция - с двумя аргументами - гораздо более полезна из "стандартного" sgn (), потому что она чаще всего используется в коде, подобном этому:
int comp(unsigned a, unsigned b){
return sgn( int(a) - int(b) );
}
против
int comp(unsigned a, unsigned b){
return sgn(a, b);
}
нет броска для неподписанных типов и дополнительного минуса.
На самом деле у меня есть этот кусок кода с использованием sgn ()
template <class T>
int comp(const T &a, const T &b){
log__("all");
if (a < b)
return -1;
if (a > b)
return +1;
return 0;
}
inline int comp(int const a, int const b){
log__("int");
return a - b;
}
inline int comp(long int const a, long int const b){
log__("long");
return sgn(a, b);
}
Если вы знакомы с функциональными языками, это отличный способ написать игровой ИИ, а если нет, то изучение одного из них поможет вам вырасти и уйти ты программист лучше, чем был. (Я мог бы честно сказать то же самое для декларативных языков, подобных Prolog, и языков динамического программирования / OO / мультипарадигм, таких как Ruby или Python! -).
Ваша задача, как вы ее описываете, должна быть легкой в любой из этих групп языков - так что выберите один и дерзайте! Мы коллективно будем рады помочь с любыми вопросами, которые могут возникнуть в результате этих попыток (я лично не знаком с F # или Scala, но был бы рад помочь с Haskell, любым языком семейства ML, Scheme или Erlang) и аналогично для других групп; -).
Серьезно:
Нет ничего из того, что вы не могли бы сделать, что появляется на другом языке.
Я уже пытался создать ИИ с использованием java, основываясь на том, что я делал в Пролог. Я подумал, что кодировать будет сука. Однако у меня была всего пара методов, которые выполняли большую часть рутинной работы, исключая их из основных методов, и они прекрасно работали.
Возможно, вам придется изобрести колесо, но в C # не должно быть многого, что можно сделать в F #.
примечание: я никогда раньше не слышал о F #, но все не так уж плохо. Я могу / не могу дуть из собственной задницы.