したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

Haskell勉強スレッド

1ひきぷろ:2017/02/25(土) 12:27:25 ID:W05e4jDU0
Haskellの勉強用スレッド

2(-_-)さん:2017/02/26(日) 09:13:10 ID:???0
・余再帰の例

function [] = []
function (x:xs) = (process x):(function xs)
 where
  process x = 〜

再帰が別の関数の引数(この場合(:))に登場する


・末尾再帰の例

function writer [] = writer
function writer (x:xs) = function (e:writer) xs
 where
  e = 〜

定義が始まりから再帰になっている

3(-_-)さん:2017/02/26(日) 09:25:35 ID:???0
iomonadfunction >>= return . nonmonad



nonmonad <$> iomonadfunction

と書き直せる。(∵ IOモナドはファンクタとしてそのように便宜を図る実装がされている)

cf.Control.Applicative

4(-_-)さん:2017/02/27(月) 05:41:28 ID:???0
そういえばHaskellって名前付けに定番ぽいのあるけどHaskell関連の本で推奨とかされてるのかな?読んだことないけど
リスト系だと末尾にsをつけて x:xs とか
再帰系だと acc というアキュムレータ(?)というやつの名前とか
関数の内側に定義する関数だと loop とか go とかを見かける、メインの関数名の末尾にアポストロフィつけた感じのもあるね

5(-_-)さん:2017/02/27(月) 05:44:43 ID:???0
アポストロフィは正格評価って意味で使われてることもあるんだっけ?
あと関数名末尾にMをつけるとモナドを意味する場合もあるらしいね
命名とかの慣習系はよく分からない

6(-_-)さん:2017/03/02(木) 05:55:32 ID:???0
https://downloads.haskell.org/~ghc/7.8.1/docs/html/users_guide/type-class-extensions.html#overloaded-lists
Overloaded lists
Listみたいな表記方法でMapとか書ける糖衣構文

7(-_-)さん:2017/03/05(日) 03:48:08 ID:???0
Haskellは関数の呼び出しを重ねることでプログラムを実行する

引数を1つ取る関数 f があり、引数に 30 を与えるなら f 30 また、(f 30) や f (30) や (f (30)) と書ける (※他のプログラミング言語だと f(30) と書くところだがHaskellは違う)

Haskellの関数は一見すると2つ以上の引数を取るように見えるものがあるが実際はちょっと違う

g 20 99 という呼び出しがある場合は ((g 20) 99) という解釈で、(g 20) の戻り値が引数が1つの関数型でその関数に 99 という引数を渡すという感じである
他のプログラミング言語的な書き方にすると (g(20))(99) という感じ(分かりにくい)

例えばHaskellで g の宣言と定義が

g :: Int -> Int -> Int
g x y = x * y

とすると
宣言の g :: Int -> Int -> Int は g :: Int -> (Int -> Int) と解釈し、 g は Int型の引数1つ受け取ると (Int -> Int) の関数を返すという

掛け算の * も関数で、中置記法という書き方で、実際の関数名は丸括弧をつけた (*) となるので g はこうとも書ける
g :: Int -> Int -> Int
g x y = (*) x y

(g 20) は先にxの値だけ決めておいた関数という感じ

8(-_-)さん:2017/03/05(日) 03:49:38 ID:???0
C++で似たようなことをしようとするとこんな感じになってしまう
http://melpon.org/wandbox/permlink/aKhm1rOf98EAQkFu

#include <iostream>

template<typename R, typename A>
class Func {
public:
virtual R invoke(A) = 0;
};

class FuncX : public Func<int, int> {
int v;
public:
FuncX(int _v) : v(_v) {}
int invoke(int a) { return a * v; }
};

class FuncG : public Func<FuncX, int> {
public:
FuncX invoke(int a) { return FuncX(a); }
} g;


int main() {

std::cout << g.invoke(20).invoke(99);

return 0;
}

9(-_-)さん:2017/03/05(日) 03:51:57 ID:???0
JavaScriptだと似たようなことが簡単にできる
http://melpon.org/wandbox/permlink/b2xUN5pC7mk8cjFm

function g(x) {
return function(y) {
return x * y;
};
}

console.log( g(20)(99) );

10(-_-)さん:2017/03/05(日) 04:18:18 ID:???0
引数を1つ受けて取って関数型を返す関数ならば演算子記号でない関数でも中置記法を使える
例えば整数の割り算の関数 div は
50割る15なら div 50 15 と書け、中置記法に直すと 50 `div` 15 と書ける

例えば
f :: Int -> Int -> Int -> Int と宣言するとは Int -> (Int -> (Int -> Int)) という関数になるので
f a b c = a + b + c
で f 10 20 は 10 `f` 20 と書け、これは 10 + 20 + c という感じになり 引数を一つ受け取る関数を返す

慣れるまで結構複雑

11(-_-)さん:2017/03/09(木) 01:10:08 ID:???0
Haskellは型について厳格なので型推論が強力なので型を明示しなくてもコンパイラが自動解決してくれたりする
C言語やC++やJavaなど型のある言語になれた人だと宣言時の型の省略に慣れないかもしれない(C++の型解決のautoとは感覚的に違う)
JavaScriptやPHPなどの型に厳格でないスクリプト言語だと型の存在がわずらわしいかもしれない
そこらへんでハードルを感じる人がそれなりにいるらしい

12(-_-)さん:2017/03/09(木) 01:12:16 ID:???0
Java8で導入されたラムダ式だと引数や戻り値の型を省略して書けるんだっけか、あれに近いといえば近い

13(-_-)さん:2017/03/09(木) 05:18:39 ID:???0
>>11
ほんとぉ?(狂気)

14(-_-)さん:2017/03/09(木) 06:38:40 ID:???0
新しいプログラミング言語を覚えるには
まずそのコードの構文を覚える、これでだいたい半分以上のコード読めるし(ただし綺麗なコードに限る)、とにかく動くだけのコードも組める
perlだけは黒魔術駆使されるコード多いのでこれには該当しないか

Haskellはせいぜい糖衣構文系(do記法など)がやっかいなくらいか

15(-_-)さん:2017/08/02(水) 23:13:06 ID:plg4AuYk0
http://ideone.com/1lj0mZ

16(-_-)さん:2017/08/02(水) 23:25:09 ID:plg4AuYk0
do記法はほかにも厄介なとこある

17(-_-)さん:2017/08/02(水) 23:32:25 ID:plg4AuYk0
人によってはここら辺は平気で受け入れられるのかもしれんが
俺は理解に苦労した

18(-_-)さん:2017/08/03(木) 01:53:17 ID:???0
ここらあたりから読めばよい?

Haskell 超入門
http://qiita.com/7shi/items/145f1234f8ec2af923ef

ウォークスルー Haskell
http://walk.northcol.org/?haskell

19(-_-)さん:2017/08/07(月) 20:29:24 ID:???0
ghciのデバッガの使い方初歩
http://www.kotha.net/ghcguide_ja/7.0.4/ghci-debugger.html

20(-_-)さん:2017/08/10(木) 00:25:40 ID:???0
本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060801/244810/

21(-_-)さん:2017/08/10(木) 00:26:48 ID:???0
>>20 ノウハウやTipsが載ってる(と思われる)

22(-_-)さん:2017/08/10(木) 01:40:00 ID:???0
水無麻那さんのツイート: "「Haskellはパッとなんかいい感じのコード書けない」って言われたら、スッてこれを出すようにしてる http://haskell-servant.readthedocs.io/en/stable/tutorial/ApiType.html "
https://twitter.com/Mizunashi_Mana/status/895071478760194050

23(-_-)さん:2017/08/10(木) 22:19:29 ID:???0
Haskellコードの高速化
http://www.kotha.net/hperf/

24(-_-)さん:2017/08/12(土) 02:38:20 ID:???0
Haskell でのデバッグ - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20120606/1338957783

25(-_-)さん:2017/08/12(土) 20:14:17 ID:???0
Import - HaskellWiki
https://wiki.haskell.org/Import

import構文

26(-_-)さん:2017/08/14(月) 00:09:20 ID:???0
再帰関数の引数は気をつけなきゃいけないらしい

関数型プログラミング言語Haskell Part30
https://mevius.2ch.net/test/read.cgi/tech/1484491434/842-854n

27(-_-)さん:2017/08/14(月) 00:17:12 ID:???0
Haskellのマニュアルの日本語訳

GHC Documentation
https://ghcguide.haskell.jp/

28(-_-)さん:2017/08/14(月) 00:22:35 ID:???0
これもマニュアルの日本語訳

「栄光のグラスゴーHaskellコンパイルシステム利用の手引き」について
http://www.kotha.net/ghcguide_ja/

29(-_-)さん:2017/08/14(月) 01:02:19 ID:???0
Haskell関連情報のリンク集っぽいやつ


https://github.com/lotz84/haskell/blob/master/README.md

30(-_-)さん:2017/08/18(金) 22:23:42 ID:???0
Haskellのモナド(1) - みどりねこ日記
http://delihiros.hatenablog.jp/entry/2012/04/12/034446

31(-_-)さん:2017/08/19(土) 20:40:47 ID:???0
お気楽 Haskell プログラミング入門
http://www.geocities.jp/m_hiroi/func/haskell15.html

32(-_-)さん:2017/08/20(日) 03:55:16 ID:???0
最強のパーザー、Parser Combinator - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040730

まずは基本的なことを - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040731

Brainfuck - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040725

33(-_-)さん:2017/08/20(日) 03:56:54 ID:???0
ストーリームIO - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040706

超前衛的ゲームプログラミング方法論Ⅰ - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040802

超前衛的ゲームプログラミング方法論Ⅱ - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040803

超前衛的ゲームプログラミング方法論Ⅲ - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040804

Haskellでゲーム - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20050530

34(-_-)さん:2017/08/20(日) 03:58:33 ID:???0
Ultra Low-Level Haskell Programming - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20070917

Low-Level Haskell Programming - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20070918

Tempale meta-programing for Haskell - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20041227

35(-_-)さん:2017/08/20(日) 04:00:26 ID:???0
Haskellは一日にして成らず 〜関数型プログラミングのGUI事情〜 - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040709

はじめてのOpenGL - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040723

ghc 6.4... - 純粋関数型雑記帳
http://d.hatena.ne.jp/tanakh/20040724

36(-_-)さん:2017/08/20(日) 04:07:01 ID:???0
Haskellスペースリーク Advent Calendar 2015 - Qiita
http://qiita.com/advent-calendar/2015/haskell-space-leaks

37(-_-)さん:2017/08/20(日) 04:30:34 ID:???0
関数型言語での関数の基礎知識 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110408/1302234783

Haskellの文法(分岐編) - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110826/1314352340

Haskellの文法(再帰編) - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110829/1314584585

QAで学ぶMonad - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110413/1302683869

カリー化談義 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110906/1315279311

Haskellの講義に関するQ&A - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20111124/1322100759

38(-_-)さん:2017/08/20(日) 04:31:54 ID:???0
Monadとして抽象化すると何が嬉しいの? - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20100526/1274837088

関数合成の妙技 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20100702/1278036842

Applicativeのススメ - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20101211/1292021817

HaskellとDSL - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110822/1313981155

39(-_-)さん:2017/08/20(日) 04:32:50 ID:???0
Haskellスペースリーク Advent Calendar 2015 - Qiita
http://qiita.com/advent-calendar/2015/haskell-space-leaks

GHC でスタックトレース - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20130205/1360051153

Haskell(GHC)での軽量ユーザスレッドの実装方法 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20110902/1314934306

40(-_-)さん:2017/08/20(日) 04:45:16 ID:???0
Haskellには副作用がないのか? - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20090627/1246135829

Haskellと副作用 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20091214/1260774669

Haskellでtry/throw/catch/finally - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20090819/1250660658

例題で比較する状態系のモナド - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20090826/1251258560

遅延評価と末尾再帰と余再帰 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20091122/1258899591

遅延評価だけだと出力の順番が定まらない例 - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/20090918/1253243061

41(-_-)さん:2017/10/12(木) 15:53:53 ID:???0
モナドとわたしとコモナド
WindowsでのHaskell開発環境構築(2017年秋版)
http://fumieval.hatenablog.com/entry/2017/10/11/230117

42(-_-)さん:2017/10/27(金) 19:02:35 ID:???0
Haskellライブラリ入門 (2011年版) - あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/touch/20110525/1306298046

43(-_-)さん:2017/11/22(水) 21:58:36 ID:IsnBxgGc0
A Gentle Introduction to Haskell, Version 98
http://www.sampou.org/haskell/tutorial-j/index.html
「やさしい Haskell 入門 (バージョン98)」のHTMLバージョン

44(-_-)さん:2017/11/22(水) 21:59:25 ID:IsnBxgGc0
HaskellでLispのSchemeの簡易な実装を作るチュートリアル

Adam Wespiser Write You A Scheme, Version 2
https://wespiser.com/writings/wyas/home.html

Write Yourself a Scheme in 48 Hours - Wikibooks, open books for an open world
https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours

45(-_-)さん:2017/11/22(水) 22:08:17 ID:IsnBxgGc0
Tutorials - HaskellWiki
https://wiki.haskell.org/Tutorials

チュートリアルいっぱいある
どれがいいのだろうか

46!id:ignore:2017/11/28(火) 17:51:27 ID:???0
HaskellでDP(動的計画法)するには(学習パス)

ラムダ抽象

combinator

supercombinator

CAF (Constant Applicative Form)

DP


ナイーブな理解:
関数と引数の組ではメモ化が発動しないそうだ
f x =〜を、f = \x->〜と書き直して定数風に定義する
このことをちゃんと説明するのが上記の用語(知らんけど)

47(-_-)さん:2017/11/28(火) 17:54:57 ID:???0
おっと、DPというより、『メモ化するには』だったな

48(-_-)さん:2017/12/22(金) 17:39:27 ID:???0
RULESによるコンパイル時プログラミング - www.kotha.netの裏
http://d.hatena.ne.jp/mkotha/20131206/1386330227

難しい

49(-_-)さん:2018/01/14(日) 19:22:33 ID:meyqB3sQ0
Real World Haskell
http://book.realworldhaskell.org/

Real World Haskell
http://book.realworldhaskell.org/read/


リアルワールド

50(-_-)さん:2018/01/19(金) 05:32:34 ID:AA6d4hAc0
型推論の関連(Haskellの仕組みの理解のための情報?)

型族が単射だと嬉しい理由 - Qiita
https://qiita.com/lotz/items/6c038698c8f04f57113a

7.10. 等式制約
http://www.kotha.net/ghcguide_ja/7.6.2/equality-constraints.html

型クラスを含んだ型推論を概観する ?Typing Haskell in Haskell より? - yu-i9.tmp
http://yu-i9.hatenablog.com/entry/thih


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板