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

Частота подсчета символов OCAML с использованием переключателей

Я пытаюсь подсчитать количество времени, в течение которого каждый символ появляется в строке, я использую переключатели и цикл for, однако они не увеличиваются должным образом. Вот мой код

let countChar x = 
    match x with
    'A'-> countA := !countA +1;
    |'C'-> countC := !countC +1;
    |'T'-> countT := !countT +1;
    |'G'-> countG := !countG +1;    
;;
let demoStri = "ACGTACGT" in 
for j = 0 to 7 do
countChar demoStri.[j];
let tempA = !countA in
    print_int tempA;
    print_string "\n";
let tempC = !countC in
    print_int tempC;
    print_string "\n";
let tempG = !countG in
    print_int tempG;
    print_string "\n";
let tempT = !countT in 
    print_int tempT;
    print_string "\n";
done

Но по какой-то причине он только увеличивает 1 и возвращает 1 0 0 0, 2 0 0 0, 3 0 0 0 и так далее..... Мне было интересно, что-то пошло не так в процессе?


  • Почему вы не используете j? 17.10.2016
  • почему не Лист.итер??? 17.10.2016
  • это была опечатка, я использовал что-то отличное от j в своем коде, но изменил его для этого кода. 17.10.2016

Ответы:


1

Я не вижу проблем с этим кодом в его нынешнем виде, он у меня работает. Вы не показываете свои инициализации countA, countC, countT и countG, но если я инициализирую следующим образом:

let countA = ref 0
let countC = ref 0
let countT = ref 0
let countG = ref 0

Затем запустите свой код. Я получаю эту серию чисел (свернутые четыре строки для экономии места):

1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1
2 1 1 1
2 2 1 1
2 2 2 1
2 2 2 2
17.10.2016

2

Самая большая проблема здесь заключается в том, что вы используете переменную tempH для индексации строки вместо j, которую вы должны были использовать.

let () = 
    let demoStri = "ACGTACGT" in 
    let countA = ref 0 in
    let countC = ref 0 in
    let countT = ref 0 in
    let countG = ref 0 in
    for j = 0 to String.length demoStri - 1 do
        match demoStri.[j] with
        | 'A'-> countA := !countA +1
        | 'C'-> countC := !countC +1
        | 'T'-> countT := !countT +1
        | 'G'-> countG := !countG +1
        | _ -> assert false
    done;
    print_int !countA; print_string "\n";
    print_int !countC; print_string "\n";
    print_int !countT; print_string "\n";
    print_int !countG; print_string "\n"
17.10.2016
  • Проблема не в цикле for, а в функции. его цикл прекрасно работает в моем исходном коде. Просто не увеличивается должным образом. 17.10.2016
  • Я провел некоторое тестирование, и с кодом действительно что-то не так, он увеличивает только первый случай, если я изменил «A» -> countA := !countA + 1 на «C» -> countC := !countC + 1 он будет увеличивать countC вместо countA. 17.10.2016
  • мои извинения, вы были правы, я просто слишком много думал, спасибо 17.10.2016
  • Новые материалы

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

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

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

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

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

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

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