関数型プログラミング言語Haskell Part21
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/01/21(月) 02:16:16.07ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
Part20 ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
0655デフォルトの名無しさん
2013/03/06(水) 11:15:27.50逆に言うとHaskellは副作用(参照透明性の確保?)に対して厳格すぎるから
モナドとかいう難しいものを導入しなければならなかった、と理解してるんだけどあってるかな?
そこまで厳格に参照透明性にこだわるメリットってなに?
0656デフォルトの名無しさん
2013/03/06(水) 11:16:55.860657デフォルトの名無しさん
2013/03/06(水) 11:29:19.44現に、オセロでは中央より隅の方が強い
0658デフォルトの名無しさん
2013/03/06(水) 11:31:35.23手続き型言語における参照透過性のメリットの一例
意味論で考えると参照透過な実装はそうでないものより事前事後条件が簡単っていうのがある
つまり意味論的な解析を利用するような静的検査がやりやすい
こういうのがデフォルトで使えるっていうのは「タイプは基本的に遅いけどconstは一瞬で打てるようになった」みたいな人にとっては青い芝生だわな
0659デフォルトの名無しさん
2013/03/06(水) 11:43:40.810660デフォルトの名無しさん
2013/03/06(水) 11:54:23.35参照透過性のメリット理解できてないとか
プログラマとして普通に三流だぞ
0661デフォルトの名無しさん
2013/03/06(水) 11:55:06.10入力以外の、たとえばグローバル変数みたいなものに影響されないから。
0662デフォルトの名無しさん
2013/03/06(水) 11:55:42.000663デフォルトの名無しさん
2013/03/06(水) 11:56:44.40結果をキャッシュしたりすることもできるんだよね。
0664デフォルトの名無しさん
2013/03/06(水) 11:57:48.690665デフォルトの名無しさん
2013/03/06(水) 11:59:41.130666デフォルトの名無しさん
2013/03/06(水) 12:06:56.12プログラマを買いかぶってはいけない。プログラマの99%は三流以下だよ。
0667デフォルトの名無しさん
2013/03/06(水) 12:27:28.45http://shuklan.com/haskell/lec08.html#/
0668デフォルトの名無しさん
2013/03/06(水) 12:38:24.670669デフォルトの名無しさん
2013/03/06(水) 12:50:01.18beep()で考えると、一回beep()が実行されると、一度音が鳴る。
続けて3回実行されれば、三度鳴る。というように積み重ねられる
ことによって、コンピュータの挙動が変化する。beep()自体は
変化がなくても、コンピュータ全体としては変化してしまう。
これが一般的な副作用。参照透過性の議論は計算モデル内部に
限定しての話でこれは勿論副作用論議の重要な部分だがすべて
ではない。
0670デフォルトの名無しさん
2013/03/06(水) 12:53:19.80当方PHPしかできません
0671デフォルトの名無しさん
2013/03/06(水) 12:54:00.850672デフォルトの名無しさん
2013/03/06(水) 13:10:31.81生産性を高める為。
0673デフォルトの名無しさん
2013/03/06(水) 14:34:31.13まあでも,なんでわざわざ関数型言語を使うのか,というのは別の話のしかたもあるかも
lyahとか「なぜ関数プログラミングは重要か」あたりの文章を読んでみるとか
0674デフォルトの名無しさん
2013/03/06(水) 14:48:43.950675デフォルトの名無しさん
2013/03/06(水) 16:20:27.75・モナドにはIO、State、List、Exception、Maybe等々いまでも多数あるが、
これで終わりじゃないよね?まだこれからいろんなモナドが現れるんだよね?
アドホックに。
・それらは皆モナド則を満たすわけだが、このモナド則って結局何を言ってる
んだっけ?
0676デフォルトの名無しさん
2013/03/06(水) 16:24:43.85モナド則はモナドのモジュールを作る側が気をつけることで、
おまえみたいに誰かがモナドを作ってくれると思ってる奴は気にする必要が無い
0677デフォルトの名無しさん
2013/03/06(水) 18:20:44.32参照透明性
訳語として、どっちが普及してるの?
僕は参照透明性です!
0678デフォルトの名無しさん
2013/03/06(水) 18:38:20.92この人正常範囲の人?
0679デフォルトの名無しさん
2013/03/06(水) 20:09:26.11はぁ
0680デフォルトの名無しさん
2013/03/06(水) 20:15:24.320681デフォルトの名無しさん
2013/03/06(水) 20:19:24.63無知を装った荒らしか無知な荒らしだと思います><
0682デフォルトの名無しさん
2013/03/06(水) 20:35:02.50同一人物が話を逸らす事象は見分けがつかない
0683デフォルトの名無しさん
2013/03/06(水) 20:55:04.16どうやるのがいいと思う?
0684デフォルトの名無しさん
2013/03/06(水) 20:58:31.43HaskellでPrologインタプリタを書く。
0685デフォルトの名無しさん
2013/03/06(水) 21:03:09.41このスレはなんかデリケートなオタクが多いようだな
0686デフォルトの名無しさん
2013/03/06(水) 21:06:22.100687デフォルトの名無しさん
2013/03/06(水) 21:07:03.580688デフォルトの名無しさん
2013/03/06(水) 21:08:42.80(´・ω・`)
0689デフォルトの名無しさん
2013/03/07(木) 04:10:12.84精神的な不義理ってなんだよ
0690デフォルトの名無しさん
2013/03/07(木) 07:25:13.650691デフォルトの名無しさん
2013/03/07(木) 09:15:52.790692デフォルトの名無しさん
2013/03/07(木) 09:40:40.92..の..の..の..の..の..の..の..の..
0693デフォルトの名無しさん
2013/03/07(木) 13:14:36.66前スレよりはマシだよ……
0694デフォルトの名無しさん
2013/03/07(木) 13:15:56.88そういう最適化の準備あるなら専用プロセッサあった方がいいんじゃないの?
0695デフォルトの名無しさん
2013/03/07(木) 13:20:28.26あまりそういう改善の余地は少ない。
0696デフォルトの名無しさん
2013/03/07(木) 13:26:46.670697デフォルトの名無しさん
2013/03/07(木) 17:45:45.03なんか言えよおまえら
0698デフォルトの名無しさん
2013/03/07(木) 17:50:31.810699デフォルトの名無しさん
2013/03/07(木) 18:46:50.690700デフォルトの名無しさん
2013/03/07(木) 21:33:41.080701デフォルトの名無しさん
2013/03/08(金) 00:24:53.460702デフォルトの名無しさん
2013/03/08(金) 01:49:14.170703デフォルトの名無しさん
2013/03/08(金) 02:11:11.39/⌒ヽ
| ゜Θ゜) そうなんだー
| つ
| 噤@|
\_/
0704デフォルトの名無しさん
2013/03/08(金) 09:51:59.79http://leventerkok.github.com/hArduino/
0705デフォルトの名無しさん
2013/03/08(金) 11:48:49.710706デフォルトの名無しさん
2013/03/08(金) 18:53:56.060707デフォルトの名無しさん
2013/03/08(金) 20:36:19.000708デフォルトの名無しさん
2013/03/09(土) 05:49:08.73! 彡 ヽ::: ..i'´. ヾ'''、、、,,,
シ 彡 ,j::: ..,/ヾ, ヽ
!シ ,,彡 :シ ,;'''' ヾ ,___ ヽ
j ,-‐-、 i ッ三ミ:;j i、' j-‐ `, , ‐'' = ) ヽ:
し { !⌒- ヽ! j ‐-‐'j ヽ、...' ' .,_//, !;::
ヾ丶`-' ! ! {__,__,!' -‐' ヾ ノ:::
,ヾ ' 、 ,' ....,) :: ヽ ノ::::::
_...-‐‐'''´ ::: ´::( _... ´ ヽ /:::::::
:: ! .... -‐´ ヽ /::::: __,....,,-‐-、
::::. ヽ !......:-‐ー、 ,,,,,,;;;ヽ __ ...-‐、 :: `ヽ-、___,--/'´ ,、 , `ヽ、
!:::,´´´´´:::::`"""´:::::::::::::::;;;;;;;;ヽ、 ;:: ヽ-‐' ! ./ iヽ
0709708
2013/03/09(土) 05:49:42.460710デフォルトの名無しさん
2013/03/09(土) 07:50:42.74"Mod 12" 自体が型になってるようなの( C++風に書くと"Mod<12>" )
でも12の部分は型名じゃなくちゃいけないんだから無理か
0711デフォルトの名無しさん
2013/03/09(土) 08:08:22.08data Zero
data Succ a
的なのでゴニョゴニョ
0712デフォルトの名無しさん
2013/03/09(土) 09:03:13.45GHC7.6ならDataKinds拡張で12を型として使える
でも型レベルの加減乗除はまだ実装されてないのでまともに使えるかは知らん
{-# LANGUAGE DataKinds, KindSignatures, ScopedTypeVariables #-}
import GHC.TypeLits
newtype Residue (n :: Nat) = Residue Int {- invariant: 0<=x<n -}
deriving (Eq, Ord)
-- smart constructor
residue :: forall n. (SingI n) => Int -> Residue n
residue a = Residue $ mod a $ fromIntegral n
where
n = fromSing (sing :: Sing n)
instance Show (Residue n) where
showsPrec p (Residue x) = showsPrec p x
instance SingI n => Num (Residue n) where
Residue x + Residue y = residue $ x + y
Residue x - Residue y = residue $ x - y
Residue x * Residue y = residue $ x * y
signum (Residue 0) = 0
signum _ = 1
abs x = x
fromInteger = residue . fromInteger
main = do
print (3 + 4 :: Residue 2)
print (3 + 4 :: Residue 3)
print (3 + 4 :: Residue 4)
0713デフォルトの名無しさん
2013/03/09(土) 09:17:24.88http://ideone.com/O243Zk
0714デフォルトの名無しさん
2013/03/09(土) 11:21:45.67ファイルをインポートしようとしたのですがエラーがこのようにでました。
Could not find module `Dates'
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Dates.hsでは
module(
--- data や 関数
) where
のように外部からアクセス出きるようにして、
インポート側はimport Datesを最初の行にいれています。何がいけないのでしょうか?
0715デフォルトの名無しさん
2013/03/09(土) 12:03:57.56Dates.hsを置いてるディレクトリと、GHCを実行してるディレクトリは同じになってる?
もし違うなら、-iとかを渡さないといけない
0716デフォルトの名無しさん
2013/03/09(土) 14:22:34.44ありがとうございます。
0717デフォルトの名無しさん
2013/03/10(日) 03:59:11.200718デフォルトの名無しさん
2013/03/10(日) 09:04:58.99Haskellの作者がどれを選んだかは知らないので後で調べる
他人が何をしたか調べる時間よりも、自分ならどうするかを考える時間の方が長い
0719デフォルトの名無しさん
2013/03/10(日) 10:42:33.730720デフォルトの名無しさん
2013/03/10(日) 11:09:26.16Olegが何を言いたいのか読む前から知ってるんだから
0721デフォルトの名無しさん
2013/03/10(日) 17:15:35.63HUGでは通るそうなのですが何が悪いのでしょうか
drop2 :: Int -> [a] -> [a]
drop2 0 xs = xs
drop2 (n + 1) [] = []
drop2 (n + 1) (_:xs) = drop2 n xs
0722デフォルトの名無しさん
2013/03/10(日) 17:34:47.51(n+k)パターンはデフォルトでは使えなくなったような気がする。
あきらメロン
0723デフォルトの名無しさん
2013/03/10(日) 17:36:49.410724デフォルトの名無しさん
2013/03/10(日) 17:40:50.58drop2 :: Int -> [a]->[a]
drop2 0 xs = xs
drop2 n [] = []
drop2 n (_:xs) = drop2 (n-1) xs
0725721
2013/03/10(日) 18:29:24.02オプションが必要になるならあきらめマスクメロン
0726デフォルトの名無しさん
2013/03/11(月) 15:13:22.76みんなどうしてるの?
0727デフォルトの名無しさん
2013/03/11(月) 17:03:19.410728デフォルトの名無しさん
2013/03/11(月) 17:37:17.22Haskellの関数定義にはそのような抜け穴が存在しないのではないか
0729デフォルトの名無しさん
2013/03/11(月) 18:01:03.800730デフォルトの名無しさん
2013/03/11(月) 18:11:01.15一回ぐらいしか使わないローカル関数のテストは難しくない
0731デフォルトの名無しさん
2013/03/11(月) 18:15:33.54GHCにも穴はあるんだよ多分
0732デフォルトの名無しさん
2013/03/11(月) 19:41:39.12関数内で関数定義する場合に、
どういうテストが不可能だと言っているの?
0733デフォルトの名無しさん
2013/03/11(月) 19:49:03.11ローカル変数は、名前とソースの位置が同じだが値が異なる変数を何個も定義できるよ
トップレベルの変数を一個拾うのとは全然違う
0734デフォルトの名無しさん
2013/03/11(月) 23:19:17.34理由は、関数内関数には外部から見える仕様が存在しないからです
0735デフォルトの名無しさん
2013/03/12(火) 07:57:44.380736デフォルトの名無しさん
2013/03/12(火) 08:43:58.57コードブロックの一つ一つまでテストする必要はないし、テストの必要があるほど大きなブロックなら独立させればいい
0737デフォルトの名無しさん
2013/03/12(火) 08:58:22.30その後、OOPにブロックは不要という考え方が定着し
OOPと関数型は完全に分裂した
0738デフォルトの名無しさん
2013/03/12(火) 09:36:49.37最近のOO言語はやっぱりクロージャが必要って流れになってるよ。JavaもC++も。
0739デフォルトの名無しさん
2013/03/12(火) 10:43:28.34テスト
public
lambda
0740デフォルトの名無しさん
2013/03/12(火) 10:55:43.66haskell-src-extsとか使ってローカル定義を参照できるようなツールがあればいける
0741デフォルトの名無しさん
2013/03/12(火) 11:55:07.13全力で成功を回避しろ
0742デフォルトの名無しさん
2013/03/12(火) 12:41:31.93その場合、SmalltalkはOOPと関数型のどっちの所属なんだ?w
今でもSmalltalkはブロックがないと何もできないわけだが。
0743デフォルトの名無しさん
2013/03/12(火) 13:02:36.67プリミティブ型がOOPと相性が悪いのと同じ理屈
0744デフォルトの名無しさん
2013/03/12(火) 13:14:10.01そんなことないよ。Javaとは相性悪いけど、OO言語だからじゃなくて、Javaが糞だから。
0745デフォルトの名無しさん
2013/03/12(火) 19:39:31.34SmalltalkのクロージャーはSmalltalkと相性悪いの?
Smalltalkってクロージャーがないと条件分岐すらできないんだけど?
0746デフォルトの名無しさん
2013/03/12(火) 19:53:49.060747デフォルトの名無しさん
2013/03/12(火) 21:36:09.68本物のモヒカンは静的型とGUIを否定する
0748デフォルトの名無しさん
2013/03/12(火) 21:40:50.330749デフォルトの名無しさん
2013/03/12(火) 22:20:34.02モヒカンの陰謀か何かで、分かるはずのものが分からなくなる
0750デフォルトの名無しさん
2013/03/13(水) 01:52:45.11クロージャーもクラスにできるんだけど、プリミティブなくせに抽象度が違うので、これをクラスとして扱いつづけるといろいろおかしくなる
0751デフォルトの名無しさん
2013/03/13(水) 18:24:51.16BlockClosureクラスだと何がいろいろおかしくなるの?
SmalltalkってBlockClosureクラスがないと条件分岐すらできないんだけど?
0752デフォルトの名無しさん
2013/03/13(水) 19:19:43.130753デフォルトの名無しさん
2013/03/13(水) 19:24:19.19どう相性が悪いの?
カプセル化する必要のない関数はクラスに所属させる必然性はないけど
それがOOPの妨げになる理由は?
それにnamespaceとかあるよね?
そのレスただ言いたかっただけに見えるよ
0754デフォルトの名無しさん
2013/03/13(水) 20:37:45.01単にJavaみたいに1クロージャを1クラスに対応させるのが腐れなだけ
クロージャをリテラルにしてどのクロージャも同じクラスになれば問題なし
■ このスレッドは過去ログ倉庫に格納されています