Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Laertik
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 24
Завершенные тесты: 1
1

Простой пример, не могу понять

10.10.2017, 23:13. Просмотров 889. Ответов 5

Тольк-только начал изучать Haskell, как вдруг встретилась такая строка:

Haskell
1
do grid <- fmap lines getContents
Система считывает стандартный поток ввода. Но как завершить таковой поток? И как перенаправить поток на чтение из файла?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2017, 23:13
Ответы с готовыми решениями:

Не могу сделать полиморфизм. Не могу до конца понять пример по этому поводу
Есть такая задача: Класс Animal должен быть абстрактным, имеет имя и вес. Класс Reptile имеет...

Не могу понять пример из Qtcreator
Дали задание написать калькулятор на кют+ еще дополнить его одной фигней. Начал лазить и искать...

Не могу понять пример (Апплет)
import java.awt.*; import java.applet.*; /* &lt;applet code=&quot;SimpleBanner&quot; width=300 height=50&gt;...

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

переделываю пример из методички и не могу понять в чем ошибка
пример в чем ошибка?

5
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
10.10.2017, 23:27 2
Лучший ответ Сообщение было отмечено Laertik как решение

Решение

Завершить ввод из консоли (терминала) Ctrl-Z, а из файла читать
Haskell
1
2
3
4
main:: IO ()
main = do 
    grid <- fmap lines $ readFile "input.txt"
    print grid -- например
$ readFile "input.txt" то же что (readFile "input.txt")
3
Catstail
Модератор
24916 / 12640 / 2312
Регистрация: 12.02.2012
Сообщений: 20,576
11.10.2017, 07:32 3
Цитата Сообщение от Laertik Посмотреть сообщение
И как перенаправить поток на чтение из файла?
- а это делается не средствами языка, а средствами ОС. Вот как выглядит перенаправление стандартного потока чтения на чтение из файла. В командной строке пишем:
Код
 имя_исполняемого_файла < имя_входного_файла
0
Mysterious Light
Эксперт по математике/физике
4096 / 2005 / 410
Регистрация: 19.07.2009
Сообщений: 3,025
Записей в блоге: 22
11.10.2017, 12:17 4
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Ctrl-Z
Разве не Ctrl+D?
Ctrl+Z вроде переводит программу в фоновый режим.
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
11.10.2017, 12:57 5
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Разве не Ctrl+D?
Ctrl+Z вроде переводит программу в фоновый режим.
В repl, по крайней мере stack repl или stack ghci (что тоже самое) под win Ctrl+D - завершить работу,
Ctrl-Z - завершить ввод текста. Потом ещё Enter нажать. Что в perl, что без.
0
dsorokin
57 / 42 / 1
Регистрация: 25.06.2015
Сообщений: 69
11.10.2017, 18:34 6
getContents - одна из самых дурацких функций в базовой библиотеке. Мне кажется, что там нарушается ссылочная прозрачность, но особо не интересовался.

Если нужно прочитать из файла, то не забудьте рассмотреть также hGetContents.

И вообще, посмотрите лучше сразу на conduits. Я их пока не использовал, но их концепция гораздо ближе к ФП (akka streams на них похожи), но они могут быть менее эффективны, чем чтение из файла обычным способом

Добавлено через 11 минут
Подумал. Да, определенно, ссылочная прозрачность нарушается. Поэтому это совершенно нормально, что функция getContents вызывает вопросы.

Моя догадка такая, что перестает считывать, как мы перестаем разворачивать список, который она возвращает. А список в ленивом haskell - это по сути итератор
0
11.10.2017, 18:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2017, 18:34

переделываю пример из методички и не могу понять в чем ошибка
переделываю пример из методички не могу понять в чем ошибка буду признателен

Не могу разобраться с классом Thread. (пример простой внутри)
class MyThread extends Thread { String str; MyThread (String str) { this.str = str; } ...

Не могу понять почему не работает простой запрос ошибка в логике
в бд две записи Array ( =&gt; Array ( =&gt; 52 =&gt; 89021557 ...


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

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

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