Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
BocBou
1 / 1 / 0
Регистрация: 05.06.2015
Сообщений: 23
1

Создать двумерный массив (лист) с рандомными значениями

24.12.2018, 21:22. Просмотров 2296. Ответов 6

Уже несколько дней пытаюсь понять, как в хаскеле создать двумерный массив с заполнением его рандомными значениями.
Двумерный массив создать могу, рандомный одномерный тоже могу, да и даже двумерый рандомный тоже могу, только вот...
Haskell
1
2
3
4
5
6
7
randL :: (Random a, Num a) => Int -> IO [a]
randL n = do
  g <- newStdGen
  return (take n (randomRs (0,1) g))
  
randM :: (Random a, Num a) => Int -> [IO [a]]
randM n = [ (randL n) | _ <- [1..n]]
На выходе я получаю не [[a]], а [IO [a]], из-за чего весь прочий код неспособен его обработать.

Есть какая-то возможность создать двумерный рандомный массив без IO?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2018, 21:22
Ответы с готовыми решениями:

Создать двумерный массив. Заполнить рандомными значениями
Доброго времени суток, по-возможности, очень нужна ваша помощь. Задание звучит так: &quot;Создать...

Создать двумерный массив с рандомными числами
Задание такое: Создать 2х мерный массив с рандомными числами размерностью 5*5 Из этого 2х...

Создать одномерный массив с рандомными значениями, чтобы его значения выводились на оси X
Ребят, помогите, пожалуйста! мой друг, не очень умный, горит на экзамене с задачей, а Я в бэйсике...

Массив: создать двумерный массив n * m, заполненный рандомными вещественными числами
вводятся 2 числа n и m, создать двумерный массив n*m заполненный рандомными вещественными числами...

Не заполняется массив рандомными значениями
#include &lt;stdio.h&gt; int main() { int a; int b; int j,i; for (i = 0; i &lt; 3; i = i + 1) { ...

6
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
24.12.2018, 23:33 2
Лучший ответ Сообщение было отмечено BocBou как решение

Решение

Цитата Сообщение от BocBou Посмотреть сообщение
Есть какая-то возможность создать двумерный рандомный массив без IO?
То есть список списков, судя по коду.

Haskell
1
2
randM :: (Random a, Num a) => Int -> IO [[a]]
randM n = sequence [ (randL n) | _ <- [1..n]]
Добавлено через 6 минут
Можно
Haskell
1
randM n = replicateM n $ randL n
подключив
Haskell
1
import Control.Monad
2
BocBou
1 / 1 / 0
Регистрация: 05.06.2015
Сообщений: 23
25.12.2018, 03:00  [ТС] 3
Да, но на выходе мы всё равно получаем IO.
Мне надо получить:
Haskell
1
a -> [[a]]
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
25.12.2018, 04:32 4
Лучший ответ Сообщение было отмечено BocBou как решение

Решение

Цитата Сообщение от BocBou Посмотреть сообщение
Да, но на выходе мы всё равно получаем IO.
Обязательно с IO. Вы же обращаетесь к функции newStdGen, которая сама с IO.
В основной программе (или откуда вы randM будете вызывать) получите уже без IO, например
Haskell
1
2
3
4
main :: IO ()
main = do
    r <- (randM 3 ) :: IO [[Double]]
    print r -- тип r :: [[Double]]
Добавлено через 7 минут
Но, при этом вызывающая программа (main в примере) сама должна быть с IO. Функции с IO нельзя вызывать из функций без IO.
2
BocBou
1 / 1 / 0
Регистрация: 05.06.2015
Сообщений: 23
25.12.2018, 15:57  [ТС] 5
Боже, как всё просто... Огромное спасибо. И почему такую элементарную инфу фиг где найдёшь?
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,525
Записей в блоге: 9
25.12.2018, 19:09 6
Цитата Сообщение от BocBou Посмотреть сообщение
И почему такую элементарную инфу фиг где найдёшь?
Эта инфа есть во всех в большинстве учебников. Только там более подробное объяснение разбито на два этапа. Вначале объясняют что такое монады, а потом что такое - IO, а это такая монада.
http://learnhaskellforgood.narod.ru/...ml#do-notation
http://anton-k.github.io/ru-haskell-book/book/8.html
- Холомьёв лучший учебник на русском языке, только читать нужно сначала. (Ссылки на полный русский перевод Липовача всё время оказываются битыми, к тому же там развлекательно, но меньше тем охватывается).
Оба устарели по части установки Haskell.
Ещё http://dev.stephendiehl.com/hask/#monads .
2
BocBou
1 / 1 / 0
Регистрация: 05.06.2015
Сообщений: 23
25.12.2018, 20:20  [ТС] 7
Цитата Сообщение от Curry Посмотреть сообщение
Эта инфа есть во всех в большинстве учебников.
Не спорю, но когда я гуглил, как убрать ИО (на английском в первую очередь), ничего адекватного я не находил. В том числе в ответах на аналогичные вопросы.
Возможно, из-за незнания не так искал или тупо не понимал ответ, но такого решения я точно не находил.
В любом случае спасибо за доп инфу.
0
25.12.2018, 20:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2018, 20:20

Создать матрицу с рандомными значениями, но статическими по диагонали
Требуется создать рандомную матрицу 9x9 и вывести ее на экран. Важно,чтобы элементы по диагонали...

Надо задать массив размером n и заполнить его рандомными значениями
Помогите с C# const int = n; Надо задать массив размером n и заполнить его рандомными значениями...

Как заполнить двумерный массив рандомными числами
Дан двумерный массив, 5 строк и 10 столбцов. Нужно его заполнить рандомными числами.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.