Nano Hash - криптовалюты, майнинг, программирование

F# Добавить каждый элемент Seq к другому отдельно, а затем применить функцию к каждому

У меня есть две последовательности: одна называется Hand с 5 элементами, другая называется Deck некоторого размера n. Мне нужно сначала добавить 1-й элемент колоды в руку (создает новую последовательность размером 6), а затем запустить функцию для этой новой последовательности, чтобы получить счет, например, 50. Затем мне нужно добавить 2-й элемент колоды в руку (снова новая последовательность размера 6) и запускает функцию, чтобы получить, скажем, 25 баллов.

Это нужно сделать для всех элементов в колоде, чтобы у меня была куча баллов. Неважно, будут ли эти оценки сохранены в виде списка или как-то иначе. Затем мне нужно найти среднее значение всех этих результатов и вернуть это значение.

Вот пример псевдокода того, что мне нужно:

Hand = {S2; C5; HK; D9; C1}, Deck = {...a bunch of cards...}
score[0] = CalcScore (Hand.append Deck[0])  //e.g. CalcScore ({S2; C5; HK; D9; C1; HJ})
score[1] = CalcScore (Hand.append Deck[1])  //e.g. CalcScore ({S2; C5; HK; D9; C1; D2})
score[n] = CalcScore (Hand.append Deck[n])  //e.g. CalcScore ({S2; C5; HK; D9; C1; SQ})

return averageScore = score.average

Я знаю, что если я могу создать список или последовательность, содержащую каждую из отдельных оценок, я могу просто использовать Seq.average/List.average, но я не уверен, как сделать первую часть с добавлением и запуском функции для каждого элемента отдельно и сохраняя это значение.

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

Любое руководство или информация очень поможет, спасибо!


  • По сути, сделайте что-то похожее на ваш последний вопрос, но используйте усреднение 23.04.2017
  • Разница заключалась в том, что в вопросе была только 1 последовательность, в ней используются 2 последовательности, требующие, чтобы элементы одной добавлялись к другой по отдельности, и выполнялась функция, которая является главной вещью, которую я не понимаю. 23.04.2017

Ответы:


1

Во-первых, напишите функцию для подсчета очков с добавленной карточкой:

let scoreWithAppendedCard card =
   CalcScore (Seq.append Hand [card])

Потрясающий! Теперь сделайте это для каждой карты в колоде:

let allScores = Deck |> Seq.map scoreWithAppendedCard

Теперь осталось только вычислить среднее значение:

let averageScore = Seq.average allScores

Или вы можете сделать все это за один раз, не называя промежуточные значения:

let averageScore =
   Deck 
   |> Seq.map (fun card -> CalcScore (Seq.append Hand [card]))
   |> Seq.average
23.04.2017
  • Большое спасибо! Мне действительно нужно изучить материал о том, как правильно создавать функции более высокого порядка, а также как писать лямбда-функцию. Знаете ли вы какие-нибудь хорошие источники, кроме msdn, потому что это отстой, ха-ха. 23.04.2017
  • На самом деле реализация его в моем коде приводит к ошибкам: тип «int» не поддерживает оператор «DivideByInt» при выполнении Seq.average. 23.04.2017
  • Nvm Я исправил это, добавив |› Seq.map float перед |› Seq.average! 23.04.2017
  • @TJB. Если вы все еще читаете MSDN, чтобы узнать о F#, то, вероятно, вам еще не указали на fsharpforfunandprofit.com, который, возможно, является лучшим сайтом F# в Интернете. 23.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..