Я не применил себя функциональному программированию, ох, почти 20 лет, когда мы не продвинулись дальше написания факториалов и выдумок, поэтому я действительно обращаюсь к сообществу за помощью в поиске решения.
Моя проблема заключается в следующем:
«Учитывая группу торговых объектов, я хочу найти все комбинации сделок, которые сводятся к нулю +/- некоторый допуск».
Мой стартовый вариант для десяти:
let NettedOutTrades trades tolerance = ...
Предположим, что моей отправной точкой является ранее построенный массив кортежей (торговля, значение). Что я хочу вернуть, так это массив (или список, что угодно) массивов сделок, которые выводятся.Таким образом:
let result = NettedOutTrades [| (t1, -10); (t2, 6); (t3, 6); (t4; 5) |] 1
приведет к:
[|
[| t1; t2; t4 |]
[| t1; t3; t4 |]
|]
Я думаю, что это может быть достигнуто с помощью хвостовой рекурсивной конструкции, используя два аккумулятора - один для результатов и один для суммы торговых значений. Но как собрать все это вместе?
Я уверен, что смогу выбить что-нибудь процедурное с помощью C #, но это просто не похоже на подходящий инструмент для работы - я убежден, что будет элегантное, лаконичное, эффективное решение, использующее функциональную парадигму ... Я просто недостаточно хорошо практиковался, чтобы идентифицировать это в настоящее время!