関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
探検
関数型プログラミング言語Haskell Part33
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/10(月) 18:17:36.49ID:L6eYQqyh551デフォルトの名無しさん
2020/11/02(月) 00:43:43.72ID:TnMF05Pn ---- エラーメッセージ
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow
Compiling your program...
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:6:47: error:
• No instance for (Num (Parser Int))
arising from the 'deriving' clause of a data type declaration
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
• When deriving the instance for (Num ParserInt)
|
6 | newtype ParserInt = PI (Parser Int) deriving (Num)
| ^^^
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow
Compiling your program...
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:6:47: error:
• No instance for (Num (Parser Int))
arising from the 'deriving' clause of a data type declaration
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
• When deriving the instance for (Num ParserInt)
|
6 | newtype ParserInt = PI (Parser Int) deriving (Num)
| ^^^
552デフォルトの名無しさん
2020/11/02(月) 21:44:04.17ID:aBc5dqas こうすりゃ無理やり通すことはできるけど、
そもそもパーサ同士の足し算等々でどう動いて欲しいのか分からんから
まともなインスタンス宣言が書けん
{-# LANGUAGE FlexibleInstances #-}
instance Num (Parser Int) where
x + y = x
x * y = x
abs x = x
signum x = x
negate x = x
fromInteger n = return 0
そもそもパーサ同士の足し算等々でどう動いて欲しいのか分からんから
まともなインスタンス宣言が書けん
{-# LANGUAGE FlexibleInstances #-}
instance Num (Parser Int) where
x + y = x
x * y = x
abs x = x
signum x = x
negate x = x
fromInteger n = return 0
553デフォルトの名無しさん
2020/11/02(月) 23:56:16.57ID:Zq9JUsOb >>552
元は別スレに出てた問題で
「与えられた文字列の中で“trickと"treat”どっちが先に出てくるか判定せよ」
なんです
とりあえずparserを与える関数として
makeP = mconcat . map ( manyTill anyChar . char )
でできました
コレを例えば"abc"にapplyするとmtl = manyTill、ac=anyCharとして
(mtl ac $ char 'a') <> (mtl ac $ char 'b') <> (mtl ac $ char 'c'>
というparserになりコレにhiajklbcnという文字列をparseするとhijklとabcが出現するするまでに読み飛ばした文字列を返してくれます
それでお題の答えとしてparseの結果を
lastInd x s = case ( runParser ( makeP x ) () "" s ) of
Left _ -> ( [ 2, 0 ] , x )
Right y -> ( [ 0, length $ x ++ y ], x )
のようにしてlengthで数えたんです
しかしちょっと冗長なかんじがします
そもそも読み飛ばした文字列なんか欲しいわけではなく読み飛ばした文字数が欲しいだけだからほんとは
Parser String 型ではなく例えば
length <$> ( manyTill anyChar ( char 'x')
とかのParser Intで十分です
問題はコレをどうやって繋げて総和を返すコンビネータを作ろうかというところなんです
Parser Stringはmonoid型を持ってるのでmconcat一発で繋げられるんですがParser IntはNum持ってないのでsum一発で繋げるというわけにはいかないんです
なんとかできないかと探してみるとなんか「Numをderivingする」という記事を見つけて、お、コレでいけないかと色々やってみたんですがやはりParser Intにderiving一髪でNum入れる方法見つからなくてなんとかならんもんかと
元は別スレに出てた問題で
「与えられた文字列の中で“trickと"treat”どっちが先に出てくるか判定せよ」
なんです
とりあえずparserを与える関数として
makeP = mconcat . map ( manyTill anyChar . char )
でできました
コレを例えば"abc"にapplyするとmtl = manyTill、ac=anyCharとして
(mtl ac $ char 'a') <> (mtl ac $ char 'b') <> (mtl ac $ char 'c'>
というparserになりコレにhiajklbcnという文字列をparseするとhijklとabcが出現するするまでに読み飛ばした文字列を返してくれます
それでお題の答えとしてparseの結果を
lastInd x s = case ( runParser ( makeP x ) () "" s ) of
Left _ -> ( [ 2, 0 ] , x )
Right y -> ( [ 0, length $ x ++ y ], x )
のようにしてlengthで数えたんです
しかしちょっと冗長なかんじがします
そもそも読み飛ばした文字列なんか欲しいわけではなく読み飛ばした文字数が欲しいだけだからほんとは
Parser String 型ではなく例えば
length <$> ( manyTill anyChar ( char 'x')
とかのParser Intで十分です
問題はコレをどうやって繋げて総和を返すコンビネータを作ろうかというところなんです
Parser Stringはmonoid型を持ってるのでmconcat一発で繋げられるんですがParser IntはNum持ってないのでsum一発で繋げるというわけにはいかないんです
なんとかできないかと探してみるとなんか「Numをderivingする」という記事を見つけて、お、コレでいけないかと色々やってみたんですがやはりParser Intにderiving一髪でNum入れる方法見つからなくてなんとかならんもんかと
554デフォルトの名無しさん
2020/11/03(火) 01:59:40.73ID:WdkpFDBO わざわざNumのインスタンスにしなくても、これでいいのでは
makeP = fmap sum . mapM ( fmap length . manyTill anyChar . char )
makeP = fmap sum . mapM ( fmap length . manyTill anyChar . char )
555デフォルトの名無しさん
2020/11/03(火) 10:26:04.44ID:qaG2IpUi >>554
うん、まぁ別にNumのインスタンス入れなくてもこの問題の話だけならいくらでも方法はあると思うんだけど、そもそもモナドってもこういう時のためにあるんじゃないのかなと思って
例えば(+)なら Num a,Functor f のとき Num (f a)は自然には導出できない、なぜなら fmap (+) は f a -> f ( a - > a ) になってしまう
しかし Applicative f なら lifaA2 (+) がピッタリ f a -> f a -> f a になって自然にキレイに Num (f a) が導出できる
だからすごく理論的には自然なのに方法がないのは何故なんだろうと
というかderiving (...) の (...) にかけるやつとダメなやつの基準がわからない
実用本位でよく使うやつだけ用意されてるに過ぎないのかな?
うん、まぁ別にNumのインスタンス入れなくてもこの問題の話だけならいくらでも方法はあると思うんだけど、そもそもモナドってもこういう時のためにあるんじゃないのかなと思って
例えば(+)なら Num a,Functor f のとき Num (f a)は自然には導出できない、なぜなら fmap (+) は f a -> f ( a - > a ) になってしまう
しかし Applicative f なら lifaA2 (+) がピッタリ f a -> f a -> f a になって自然にキレイに Num (f a) が導出できる
だからすごく理論的には自然なのに方法がないのは何故なんだろうと
というかderiving (...) の (...) にかけるやつとダメなやつの基準がわからない
実用本位でよく使うやつだけ用意されてるに過ぎないのかな?
556デフォルトの名無しさん
2020/11/03(火) 11:32:34.46ID:WdkpFDBO 一応、Num (f a)は導出できるけど、それで定義した(+)だと
交換則(x + y = y + x)が成り立つ保証がないからじゃないかねぇ
(パーサの順番を入れ替えた場合を考えるとわかりやすい)
{-# LANGUAGE FlexibleInstances #-}
instance (Num a, Applicative f) => Num (f a) where
x + y = (+) <$> x <*> y
x * y = (*) <$> x <*> y
abs x = abs <$> x
signum x = signum <$> x
negate x = negate <$> x
fromInteger n = pure $ fromInteger n
交換則(x + y = y + x)が成り立つ保証がないからじゃないかねぇ
(パーサの順番を入れ替えた場合を考えるとわかりやすい)
{-# LANGUAGE FlexibleInstances #-}
instance (Num a, Applicative f) => Num (f a) where
x + y = (+) <$> x <*> y
x * y = (*) <$> x <*> y
abs x = abs <$> x
signum x = signum <$> x
negate x = negate <$> x
fromInteger n = pure $ fromInteger n
557デフォルトの名無しさん
2020/11/03(火) 11:50:57.17ID:hn8kPJNe >>556
なるほど、文法的に通っても意味的に文法には出てこない"Num rule"が補償されないからダメって事なのかな?
まぁ今はclassのメンバ関数の自分が利用するやつだけ定義する必要無くなったみたいだから手で書いてもいいんだけど、>>550の例だと
newtype Eval a = Eval (ReaderT Env (ExceptT String Identity) a)
deriving (Functor, Applicative, Monad, MonadReader Env, MonadError String)
とかはmonad translater越しにできるし
newtype Quantity = Quantity Int
deriving (Eq, Ord, Num, Show)
もできるのになんで Parser (Int) はあかんねんと
なんかプラクマつけたらいけんもんかと
Num くらいならいいけど Floating とかだと惨劇になってしまう
なるほど、文法的に通っても意味的に文法には出てこない"Num rule"が補償されないからダメって事なのかな?
まぁ今はclassのメンバ関数の自分が利用するやつだけ定義する必要無くなったみたいだから手で書いてもいいんだけど、>>550の例だと
newtype Eval a = Eval (ReaderT Env (ExceptT String Identity) a)
deriving (Functor, Applicative, Monad, MonadReader Env, MonadError String)
とかはmonad translater越しにできるし
newtype Quantity = Quantity Int
deriving (Eq, Ord, Num, Show)
もできるのになんで Parser (Int) はあかんねんと
なんかプラクマつけたらいけんもんかと
Num くらいならいいけど Floating とかだと惨劇になってしまう
558デフォルトの名無しさん
2020/11/03(火) 18:12:46.66ID:oSP8TPsC この話の面白いところは
Parser Intという型を宣言する言語と
そもそも型を宣言しない言語
どっちが生産性高いかってことだよ
Parser Intという型を宣言する言語と
そもそも型を宣言しない言語
どっちが生産性高いかってことだよ
559!id:ignore
2020/11/06(金) 20:16:57.19ID:uZSEyxFl stackくんさぁ、コンパイラのダウンロードが200MB強あるんだから、低速回線は途中で切断されるとかよくありそうなことじゃん
サスペンド・レジューム機能搭載は必須じゃないのかね
きょうびyoutube-dlでさえ向こうに切断Forbiddenされても今までダウンロードした分は残ってて、再度ダウンロードを開始した際には途中から残りの部分をダウンロードすように始まるってのにさ
仮に205.86 MiB / 205.87 MiBまで来て切断された場合
リトライすると0 MiB / 205.87 MiB からだなんてお互い不幸になると思わないのか?
こっちは成功するまで永遠に繰り返すんだぞ? むしろそっちの方がそちらにとっても迷惑じゃん
それとも低速回線は死ねっていう差別的思想を持っているのかね?
サスペンド・レジューム機能搭載は必須じゃないのかね
きょうびyoutube-dlでさえ向こうに切断Forbiddenされても今までダウンロードした分は残ってて、再度ダウンロードを開始した際には途中から残りの部分をダウンロードすように始まるってのにさ
仮に205.86 MiB / 205.87 MiBまで来て切断された場合
リトライすると0 MiB / 205.87 MiB からだなんてお互い不幸になると思わないのか?
こっちは成功するまで永遠に繰り返すんだぞ? むしろそっちの方がそちらにとっても迷惑じゃん
それとも低速回線は死ねっていう差別的思想を持っているのかね?
560デフォルトの名無しさん
2020/11/08(日) 11:31:57.94ID:Bx8aZf2L 一方TeXはisoイメージを使った
561デフォルトの名無しさん
2020/11/08(日) 13:05:47.79 パターンガードの変数の束縛は局所的なのですが、全ての場合で共通して使用してほしい束縛はどうやりますか?
562デフォルトの名無しさん
2020/11/09(月) 01:15:49.21ID:4MQyK7K1563デフォルトの名無しさん
2020/11/09(月) 19:55:38.03 rootsInternal :: Quadratic -> Double -> Roots
rootsInternal q d
= let
two_a = 2.0 * (a q)
realpart = - (b q) / two_a
dside d = (sqrt d) / two_a
dpart = dside d
complexpart = dside (-d)
in if d==0
then -- Discriminant is zero, (single) root is real
Root $ realpart :+ 0
else
if d<0
then -- Discriminant is negative, roots are complex
Roots (realpart :+ complexpart) (realpart :+ (-complexpart))
else -- Discriminant is positive, all roots are real
Roots ((realpart + dpart) :+ 0) ((realpart - dpart) :+ 0)
のlet 〜 in みたいなのを
rootsInternal q d
| d==0 = ...
| d<0 = ...
| otherwise = ...
みたいな書き方の時にもやりたいんです
rootsInternal q d
= let
two_a = 2.0 * (a q)
realpart = - (b q) / two_a
dside d = (sqrt d) / two_a
dpart = dside d
complexpart = dside (-d)
in if d==0
then -- Discriminant is zero, (single) root is real
Root $ realpart :+ 0
else
if d<0
then -- Discriminant is negative, roots are complex
Roots (realpart :+ complexpart) (realpart :+ (-complexpart))
else -- Discriminant is positive, all roots are real
Roots ((realpart + dpart) :+ 0) ((realpart - dpart) :+ 0)
のlet 〜 in みたいなのを
rootsInternal q d
| d==0 = ...
| d<0 = ...
| otherwise = ...
みたいな書き方の時にもやりたいんです
564デフォルトの名無しさん
2020/11/09(月) 19:58:42.43 おっと無用な改行が一々入っちゃった。。。
565デフォルトの名無しさん
2020/11/09(月) 20:20:48.18ID:UhW/CkjO >>563-564
where で出来なかったっけ?だめだったかな?
where で出来なかったっけ?だめだったかな?
566デフォルトの名無しさん
2020/11/09(月) 21:00:20.89 あ、できました。
お騒がせしました(////)
お騒がせしました(////)
567デフォルトの名無しさん
2020/11/11(水) 19:20:13.76ID:qheOKxfd 正格評価について質問です
ひとつの引数しかない関数 f を正格評価するときには
f $! x
でよいようですが2引数の場合はどうするんですか?
( f $! x ) $! y
で x, y を先に展開してくれますか?
良さげなんですがどう確かめたものやら
なんか正格評価と遅延評価で格段に計算量が変わる f の例ってありますか?
ひとつの引数しかない関数 f を正格評価するときには
f $! x
でよいようですが2引数の場合はどうするんですか?
( f $! x ) $! y
で x, y を先に展開してくれますか?
良さげなんですがどう確かめたものやら
なんか正格評価と遅延評価で格段に計算量が変わる f の例ってありますか?
568デフォルトの名無しさん
2020/11/11(水) 21:38:04.29ID:TR1bVb0l 遅延評価がなくてもGCはメモリ解放を遅らせている
GCをいじるにはIOが必要
$!を使うのにも少なくともモナドが必要と考えるのが自然なのでは?
x' <- return $! x
y' <- return $! y
return $! (f x' y')
GCをいじるにはIOが必要
$!を使うのにも少なくともモナドが必要と考えるのが自然なのでは?
x' <- return $! x
y' <- return $! y
return $! (f x' y')
569デフォルトの名無しさん
2020/11/11(水) 22:07:05.86ID:F87BSTFR >>568
そうなんですか?
とりあえずモナドで試してみます
兎にも角にも正格評価と遅延評価でこんなに計算の回数が違ってくるってのなんかご存知ないですか?
例えばdpの例でFibonacciを
f 0 = 0
f 1 = 1
f n = (f $ n-1) + (f $ n-2)
と
f' 0 = (0,1)
f' n = (a+b,a) where (a,b) = f' (n-1)
f = fst . f'
で比べると目に見えて計算量が違うみたいな奴で「正格評価が効いてる」って目に見えてわかるような例があるとありがたいんですが
そうなんですか?
とりあえずモナドで試してみます
兎にも角にも正格評価と遅延評価でこんなに計算の回数が違ってくるってのなんかご存知ないですか?
例えばdpの例でFibonacciを
f 0 = 0
f 1 = 1
f n = (f $ n-1) + (f $ n-2)
と
f' 0 = (0,1)
f' n = (a+b,a) where (a,b) = f' (n-1)
f = fst . f'
で比べると目に見えて計算量が違うみたいな奴で「正格評価が効いてる」って目に見えてわかるような例があるとありがたいんですが
570デフォルトの名無しさん
2020/11/12(木) 14:57:12.09ID:+Y5HOlnE 正格評価と遅延評価で計算量が変わるといえばtaraiじゃね?
571デフォルトの名無しさん
2020/11/12(木) 23:16:18.57ID:G64JuFLE ⊥になるものでいいじゃん
572デフォルトの名無しさん
2020/11/13(金) 06:27:56.29ID:ewlhvLCU trace や unsafePerformIO で評価順を調べられないかな
573デフォルトの名無しさん
2020/11/13(金) 12:04:46.50ID:oAmrFI5R みなさん情報ありがとうございます
今んとこヒマな時にやってみた実現は
cube x = x*x*x
a x = case x of
0 -> 0
1 -> 1
_ -> ( a $ x -1 ) + ( a $ x - 2 )
main = do
tA <- getCPUTime
print $ cube $ a 38
tB <- getCPUTime
print $ tB - tA
と
print $ cube $ a 38 → print $ a 38
の比較
結果
----
59722225363795389930809
3801127096000
----
39088169
3514055718000
この程度だとコンパイラが勝手にメモ化してくれるようで差がでないorz
まだタライとかは試して見てません
取り急ぎご報告まで
今んとこヒマな時にやってみた実現は
cube x = x*x*x
a x = case x of
0 -> 0
1 -> 1
_ -> ( a $ x -1 ) + ( a $ x - 2 )
main = do
tA <- getCPUTime
print $ cube $ a 38
tB <- getCPUTime
print $ tB - tA
と
print $ cube $ a 38 → print $ a 38
の比較
結果
----
59722225363795389930809
3801127096000
----
39088169
3514055718000
この程度だとコンパイラが勝手にメモ化してくれるようで差がでないorz
まだタライとかは試して見てません
取り急ぎご報告まで
574デフォルトの名無しさん
2020/11/16(月) 23:33:39.07ID:bCg5e61i >>567
もうとっくに解決したかもしれませんが、評価の順は trace 関数でも確認できます。
import Debug.Trace
g :: Int -> Int -> Int
g x y = trace ("g") (x + y)
main :: IO ()
main = do
let a = trace ("a") 1
let b = trace ("b") 2
let c = (g $! a) $! b
putStrLn $ show c
これを実行すれば、b a g 3 の順に出力されます。
正格評価されていると言えます。
ちなみに、($!) を ($) に変えれば、g a b 3 の順に出力されます。
もうとっくに解決したかもしれませんが、評価の順は trace 関数でも確認できます。
import Debug.Trace
g :: Int -> Int -> Int
g x y = trace ("g") (x + y)
main :: IO ()
main = do
let a = trace ("a") 1
let b = trace ("b") 2
let c = (g $! a) $! b
putStrLn $ show c
これを実行すれば、b a g 3 の順に出力されます。
正格評価されていると言えます。
ちなみに、($!) を ($) に変えれば、g a b 3 の順に出力されます。
575デフォルトの名無しさん
2020/11/18(水) 01:05:30.21ID:VzwFaHaO576デフォルトの名無しさん
2020/11/21(土) 23:31:14.57ID:ak7brOTq Haskellはライブラリの中身を覗くと
Template Haskellを駆使した
グッチャグチャの実質別言語みたいなコードがザラなのがなぁ・・・
水面下の白鳥状態じゃねーか
Template Haskellを駆使した
グッチャグチャの実質別言語みたいなコードがザラなのがなぁ・・・
水面下の白鳥状態じゃねーか
577デフォルトの名無しさん
2020/11/22(日) 16:59:26.57ID:gt3QNmmg ゴミライブラリ使うのやめて良いやつ作って公開してくれ
578デフォルトの名無しさん
2020/11/22(日) 17:19:45.03ID:MRtbpg3I 在学中か学校出たての経験浅い奴しか担い手がいないのだろうからそんなもんなんだろう
純粋関数型言語は学生がかかるはしかみたいなもので
やがて計算機科学の現状に絶望し去ってゆく
現在のコンピューターは手続き型に最適化されているのだ
純粋関数型言語は学生がかかるはしかみたいなもので
やがて計算機科学の現状に絶望し去ってゆく
現在のコンピューターは手続き型に最適化されているのだ
579デフォルトの名無しさん
2020/11/22(日) 18:37:00.71ID:36XuvgN2 単純に関数型言語がわかる人が少なすぎるからじゃないの?
580デフォルトの名無しさん
2020/11/22(日) 20:14:41.06 居飛車党と振り飛車党の闘いは続く
581デフォルトの名無しさん
2020/11/23(月) 02:58:53.25ID:v8DPq2Nr イヤ、まぁ純粋に速度とか効率とか考えたら手続き型言語の方が優位なのはその通りでしょ?
だって現在の計算機がノイマン型の手続き型の処理をするために設計されてるんだから
そりゃバリバリにチューニングしたら手続き型言語には絶対勝てない
その時代時代の最新の計算機の性能をフル活用しないとできないような処理は当面関数型言語の出番は回ってこない
しかしそこまでの処理でないならやはり関数型言語の活躍できる場面も出てはくるだろうけど、しかし例えそうなったとしても手続き型言語も関数型言語も両方臨機応変に使いこなせるようになるとなると中々難しいから、結局どちらか選ぶなら手続き型言語という事になってしまう
しばらくは関数型言語が実務の場面でバリバリ使われるようになるのは中々難しい
当面研究者とか、サンデープログラマーの趣味の世界でしか出番ないかもしれない
だって現在の計算機がノイマン型の手続き型の処理をするために設計されてるんだから
そりゃバリバリにチューニングしたら手続き型言語には絶対勝てない
その時代時代の最新の計算機の性能をフル活用しないとできないような処理は当面関数型言語の出番は回ってこない
しかしそこまでの処理でないならやはり関数型言語の活躍できる場面も出てはくるだろうけど、しかし例えそうなったとしても手続き型言語も関数型言語も両方臨機応変に使いこなせるようになるとなると中々難しいから、結局どちらか選ぶなら手続き型言語という事になってしまう
しばらくは関数型言語が実務の場面でバリバリ使われるようになるのは中々難しい
当面研究者とか、サンデープログラマーの趣味の世界でしか出番ないかもしれない
582デフォルトの名無しさん
2020/11/23(月) 03:10:25.23ID:i6Fa5mHr 並列並行処理を型で表せる辺り、強力なんだけどなぁ
583デフォルトの名無しさん
2020/11/23(月) 03:19:37.79ID:vzAx9TtB Reditを見てると、Haskellerの求人も結構あるんだが
584デフォルトの名無しさん
2020/11/23(月) 12:02:25.91ID:B9DSaA3p 居飛車と振り飛車というのは危機感が足りない
ガソリン車と電気自動車だ
個人の就職じゃなくて会社が丸ごと潰れるリスクを想定するための研究だよ
ガソリン車と電気自動車だ
個人の就職じゃなくて会社が丸ごと潰れるリスクを想定するための研究だよ
585デフォルトの名無しさん
2020/11/23(月) 13:19:57.85ID:XIoHPhIo 一句できた!
『次に来る』
言われ続けて
数十年
(来ない)
『次に来る』
言われ続けて
数十年
(来ない)
586デフォルトの名無しさん
2020/11/23(月) 13:27:42.48ID:izonrGpC 近未来
今となっては
古臭い
今となっては
古臭い
587デフォルトの名無しさん
2020/11/23(月) 13:29:17.88ID:XIoHPhIo >>586
いいね!
いいね!
588デフォルトの名無しさん
2020/11/23(月) 14:40:17.74ID:B9DSaA3p 新しいなんて嘘つくより古いものは古いものとして扱う歴史や古文の方が正しい
589デフォルトの名無しさん
2020/11/23(月) 20:51:18.66 関数型言語を処理するために設計されたコンピュータってどんな構造なんだろ
590デフォルトの名無しさん
2020/11/23(月) 21:33:53.00ID:B9DSaA3p みんなが数学好きで自己啓発嫌いなのは処理速度じゃなくて
嘘をつかないかどうかの問題
嘘をつかないかどうかの問題
591デフォルトの名無しさん
2020/11/24(火) 01:11:11.02ID:wCic/rFb >>589
LISPマシンというものがかつてありましたなあ
LISPマシンというものがかつてありましたなあ
592デフォルトの名無しさん
2020/11/24(火) 03:49:22.53ID:EBaS3Lgi JAVAチップが実現されてればスタックマシンだからFORTH最強だったのでは
593デフォルトの名無しさん
2020/11/24(火) 21:00:48.17ID:BgPUrN9t 速度は実はそこまで重要じゃない
飛行機からメンテナンスハッチ取り除いて何kg軽量化しましたって言ったところで、仕事好き定量評価好きなにわかが、わかりやすい数字見て喜ぶだけで、実際はそんな嬉しい話じゃない
というかそもそももっと遅いスクリプト言語は流行ってるし
飛行機からメンテナンスハッチ取り除いて何kg軽量化しましたって言ったところで、仕事好き定量評価好きなにわかが、わかりやすい数字見て喜ぶだけで、実際はそんな嬉しい話じゃない
というかそもそももっと遅いスクリプト言語は流行ってるし
594デフォルトの名無しさん
2020/11/24(火) 21:12:41.51 Haskell でゲーム開発したいんですが
FRP は死滅しちゃったの?
FRP は死滅しちゃったの?
595デフォルトの名無しさん
2020/11/24(火) 21:44:37.33ID:2dUwtFIm596デフォルトの名無しさん
2020/11/30(月) 15:39:12.43ID:nSv/4rn0 bind演算子の名前の由来ってなに?
なにも束縛してなくね?
なにも束縛してなくね?
597デフォルトの名無しさん
2020/11/30(月) 17:26:29.13ID:+w97lXkL a >>= b
がdo記法で
do
x <- a
b x
みたいになるからじゃね?
がdo記法で
do
x <- a
b x
みたいになるからじゃね?
598デフォルトの名無しさん
2020/11/30(月) 21:06:13.38ID:qo5X+4ip (>>) これも bind と言うよ
599デフォルトの名無しさん
2020/12/02(水) 00:25:53.39ID:E6FeESB6 ここで聞いていいのかわからないけど…
Nixのいいチュートリアルとかってある?
Nixのいいチュートリアルとかってある?
600デフォルトの名無しさん
2020/12/04(金) 21:16:59.61ID:kdWDDBYk601デフォルトの名無しさん
2020/12/05(土) 12:39:37.62ID:Na39OKS5 ブログ書いてたら彼女と無料で海外留学という名のデートに行けた話【影響力やばい】
https://www.youtube.com/watch?v=Y8Q1z3Mi7BQ
若いうちから人を雇ったり、任せるクセをつけるべき理由とは?
https://www.youtube.com/watch?v=6yAvDQxhldI
【対談】インフルエンサーマーケティングに300万円突っ込んでみた結果...
https://www.youtube.com/watch?v=AMjWD0F8PLQ
収入を上げたければ、自分の影分身を作るべし
https://www.youtube.com/watch?v=V3Kc-lUxH88
勉強のために10日間で21個のアプリを作った話【初心者時のプログラミング学習】
https://www.youtube.com/watch?v=JkN5kmR9dgk
学校では教えてくれないことの中にはお宝が眠っている
https://www.youtube.com/watch?v=oq92u9nJ7FY
ブロガーからステップアップしていくために必要なスキル
https://www.youtube.com/watch?v=F6qsOyRIaQE
https://www.youtube.com/watch?v=Y8Q1z3Mi7BQ
若いうちから人を雇ったり、任せるクセをつけるべき理由とは?
https://www.youtube.com/watch?v=6yAvDQxhldI
【対談】インフルエンサーマーケティングに300万円突っ込んでみた結果...
https://www.youtube.com/watch?v=AMjWD0F8PLQ
収入を上げたければ、自分の影分身を作るべし
https://www.youtube.com/watch?v=V3Kc-lUxH88
勉強のために10日間で21個のアプリを作った話【初心者時のプログラミング学習】
https://www.youtube.com/watch?v=JkN5kmR9dgk
学校では教えてくれないことの中にはお宝が眠っている
https://www.youtube.com/watch?v=oq92u9nJ7FY
ブロガーからステップアップしていくために必要なスキル
https://www.youtube.com/watch?v=F6qsOyRIaQE
602デフォルトの名無しさん
2020/12/05(土) 23:01:31.80ID:gIoCKCst >>600
すごい良さげ。ありがとう
すごい良さげ。ありがとう
603デフォルトの名無しさん
2020/12/05(土) 23:45:36.72ID:gZAhFzLL >>601
すごい良さげ。ありがとう
すごい良さげ。ありがとう
604デフォルトの名無しさん
2020/12/06(日) 02:18:39.34ID:HA18eG30 >>601
グロ
グロ
605デフォルトの名無しさん
2020/12/08(火) 09:15:41.98ID:VKXi32Vk 実際にちょっとしたプログラム書いてみると
メモリ周りの最適化が困難なんだよなこの言語。
しかも最適化の方向性がアルゴリズムの改良ではなく
言語特有のボトルネックの回避がメインになるから
コードを見ても最適化の意図が分かりにくくて
一見無駄に冗長に記述してるだけに見えるコードが出来上がる。
メモリ周りの最適化が困難なんだよなこの言語。
しかも最適化の方向性がアルゴリズムの改良ではなく
言語特有のボトルネックの回避がメインになるから
コードを見ても最適化の意図が分かりにくくて
一見無駄に冗長に記述してるだけに見えるコードが出来上がる。
606デフォルトの名無しさん
2020/12/08(火) 11:08:46.52ID:EAPrHNYX 最適化の意図なんてPythonと同じでいい
ライブラリは全部Cで書いてmainだけHaskellで書け
ライブラリは全部Cで書いてmainだけHaskellで書け
607デフォルトの名無しさん
2020/12/08(火) 12:02:52.73ID:mZ7rlOd+ 一時期あんなにモナドの記事とか書かれまくったのに、最近盛り上がりに欠ける
Haskell製アプリも企業が採用したって話もほとんど聞かないけど、気のせい?
尖ったところで使われてるんかな
Haskell製アプリも企業が採用したって話もほとんど聞かないけど、気のせい?
尖ったところで使われてるんかな
608デフォルトの名無しさん
2020/12/08(火) 13:07:23.14ID:EAPrHNYX 言語関係なく企業が作ったアプリを買ったことがほとんどない
個人が書いた本を買うことはある
個人が書いた本を買うことはある
609デフォルトの名無しさん
2020/12/08(火) 13:30:45.48ID:xvXTXIvz まぁなんだかんだHaskellは実用性というより、やはり数学研究の一貫の色合いが強いからなぁ
610デフォルトの名無しさん
2020/12/08(火) 13:52:48.29ID:CqCSsxMG 一環では?
数学の前に国語の研究をしたほうがよいのでは?
数学の前に国語の研究をしたほうがよいのでは?
611デフォルトの名無しさん
2020/12/08(火) 15:02:11.16ID:xvXTXIvz お前はまず自分の人間性を見直せ
煽りじゃなくマジで
煽りじゃなくマジで
612デフォルトの名無しさん
2020/12/09(水) 01:52:25.38ID:6n7tUtuW Haskell自体は面白くて本や記事も読むけど、なんか書く気起きないんだよな
でも他の言語で関数型由来の機能が追加されたときに「あ、これHaskellでやったところだ!」ってなれる
でも他の言語で関数型由来の機能が追加されたときに「あ、これHaskellでやったところだ!」ってなれる
613デフォルトの名無しさん
2020/12/17(木) 17:53:27.84ID:9eI2x+Uu Haskellでx = x + 1をIORef使わず擬似的に再現。
(実際には代入では無く、結果をラムダ式の同名の変数に渡してるだけ)
main = do let x = 0
print x
x <- inc x
print x
x <- inc x
print x
inc n = return (n + 1)
モナド式の書き方だとこうなる。
main = do let x = 0 in print x >> inc x >>= \x -> print x >> inc x >>= \x -> print x
inc n = return (n + 1)
さらに>>=演算子を()で囲んで関数にするとこうなる。
main = (>>=) ((>>=) (do let x = 0 in print x >> inc x) (\x -> print x >> inc x)) (\x -> print x)
inc n = return (n + 1)
(実際には代入では無く、結果をラムダ式の同名の変数に渡してるだけ)
main = do let x = 0
print x
x <- inc x
print x
x <- inc x
print x
inc n = return (n + 1)
モナド式の書き方だとこうなる。
main = do let x = 0 in print x >> inc x >>= \x -> print x >> inc x >>= \x -> print x
inc n = return (n + 1)
さらに>>=演算子を()で囲んで関数にするとこうなる。
main = (>>=) ((>>=) (do let x = 0 in print x >> inc x) (\x -> print x >> inc x)) (\x -> print x)
inc n = return (n + 1)
614デフォルトの名無しさん
2020/12/17(木) 17:53:45.49ID:9eI2x+Uu モナド無しだけど、Cで再現するとこんな感じ。(スタック消費するけど)
#include <stdio.h>
int inc(const int);
int f(const int);
int main(void)
{
const int x = 0;
printf("%d\n",f(f(x)));
return 0;
}
int inc(const int x)
{
return (x + 1);
}
int f(const int x)
{
printf("%d\n",x);
return inc(x);
}
#include <stdio.h>
int inc(const int);
int f(const int);
int main(void)
{
const int x = 0;
printf("%d\n",f(f(x)));
return 0;
}
int inc(const int x)
{
return (x + 1);
}
int f(const int x)
{
printf("%d\n",x);
return inc(x);
}
615デフォルトの名無しさん
2020/12/18(金) 19:59:30.35ID:PXMujPNr 目的が実用だろうが研究だろうがIORefは使っていいぞ
IORefは手段なので、具体的な目的に依存しない
IORefは手段なので、具体的な目的に依存しない
616デフォルトの名無しさん
2020/12/19(土) 08:53:57.33ID:56QZYgov 気持ちはよくわかる。自分も初めてdo式の定義を見た時、おぉぉぉとなった。
というわけで、いつdo式パラダイスが登場したのかアヒル体験してみた。
[When was do-notation introduced?](https://www.reddit.com/r/haskell/comments/8rkrgq/)
> Haskell 1.3 adopted Jones’s “do-notation,” which was itself derived
from John Launchbury’s paper on lazy imperative programming (Launchbury, 1993).
自分の場合、Haskellを知る前に、Moggi大先生の論文体験を一撃で敗退した時に
おぉぉぉした覚えがある。
* Notions of computation and monads
in [Eugenio Moggi Publications](https://person.dibris.unige.it/moggi-eugenio/publications.html)
宗教上の理由で、シーケント図が書かれた書物体験はできないが、幸いなことに、
最初のシーケント図にdo式らしきものが書いてある。ナウなヤングの言葉では
次のようになると思う。
``` haskell
kleisli_extension :: (Monad t) => (a -> t b) -> (t a -> t b)
kleisli_extension f c = do
x <- c
f x
```
今も論文に何が書かれているかわからないが、その時は、<em>おぉぉぉ、
プログラミング言語って数学的に捉えられるんだ</em>体験をした記憶がある。
一般に、紙上のプログラミング言語と実働するものとの間には万物の長城が
あるので、Haskellのdo式もすごい発明と思うが、その技法の骨子は、既に
[同時多発的](https://www.youtube.com/watch?v=FMmCJ6-uu3M)に発見されて
いたのかもしれない。歴史絵巻体験では、
[A History of Haskell](https://misreading.chat/2020/10/27/)も面白かった。
というわけで、いつdo式パラダイスが登場したのかアヒル体験してみた。
[When was do-notation introduced?](https://www.reddit.com/r/haskell/comments/8rkrgq/)
> Haskell 1.3 adopted Jones’s “do-notation,” which was itself derived
from John Launchbury’s paper on lazy imperative programming (Launchbury, 1993).
自分の場合、Haskellを知る前に、Moggi大先生の論文体験を一撃で敗退した時に
おぉぉぉした覚えがある。
* Notions of computation and monads
in [Eugenio Moggi Publications](https://person.dibris.unige.it/moggi-eugenio/publications.html)
宗教上の理由で、シーケント図が書かれた書物体験はできないが、幸いなことに、
最初のシーケント図にdo式らしきものが書いてある。ナウなヤングの言葉では
次のようになると思う。
``` haskell
kleisli_extension :: (Monad t) => (a -> t b) -> (t a -> t b)
kleisli_extension f c = do
x <- c
f x
```
今も論文に何が書かれているかわからないが、その時は、<em>おぉぉぉ、
プログラミング言語って数学的に捉えられるんだ</em>体験をした記憶がある。
一般に、紙上のプログラミング言語と実働するものとの間には万物の長城が
あるので、Haskellのdo式もすごい発明と思うが、その技法の骨子は、既に
[同時多発的](https://www.youtube.com/watch?v=FMmCJ6-uu3M)に発見されて
いたのかもしれない。歴史絵巻体験では、
[A History of Haskell](https://misreading.chat/2020/10/27/)も面白かった。
617デフォルトの名無しさん
2020/12/20(日) 18:18:16.88ID:FMam64CT ネタを拝借して、次のコードを考える。
``` haskell
inc :: (Applicative f) => Int -> f Int
inc n = pure (n + 1)
lhs :: (Int -> () -> String) -> Int -> IO String
lhs dump x = do
y <- inc x
z <- print y
pure $ dump y z
rhs :: (Int -> () -> String) -> Int -> IO String
rhs dump x = inc x >>= \y -> dump y <$> print y
lhs ((.) show . (,)) 123 >>= print
rhs ((.) show . (,)) 123 >>= print
lhs (const . const "hello") 123 >>= print
rhs (const . const "hello") 123 >>= print
```
``` haskell
inc :: (Applicative f) => Int -> f Int
inc n = pure (n + 1)
lhs :: (Int -> () -> String) -> Int -> IO String
lhs dump x = do
y <- inc x
z <- print y
pure $ dump y z
rhs :: (Int -> () -> String) -> Int -> IO String
rhs dump x = inc x >>= \y -> dump y <$> print y
lhs ((.) show . (,)) 123 >>= print
rhs ((.) show . (,)) 123 >>= print
lhs (const . const "hello") 123 >>= print
rhs (const . const "hello") 123 >>= print
```
618デフォルトの名無しさん
2020/12/20(日) 18:18:58.94ID:FMam64CT IOモナドを恒等モナドに差し替えて、Rに移植する。
``` {r raskell}
do = pure = id = function (a) a;
const = function (a) function (ab) a;
`%.%` = function (bc, ab) function (a) bc (ab (a));
`%$%` = function (ab, a) ab (a);
`%>>%` = function (a, ab) ab (a);
inc = function (n) n + 1;
caty = function (a) cat (a, "\n", sep = "");
lhs = function (dump) function (x) do ({
y <- inc (x);
z <- caty (y);
pure %$% dump (y) (z);
});
rhs = function (dump) function (x) {
inc (x) %>>% (function (y) dump (y) %$% caty (y));
};
lhs (function (y) function (z) list (y, z)) (123) %>>% print
rhs (function (y) function (z) list (y, z)) (123) %>>% print
lhs (const %.% const ("hello")) (123) %>>% print;
rhs (const %.% const ("hello")) (123) %>>% print;
```
Rは関数の引数を問答無用に遅延評価するので、最後の`rhs`だけがHaskellと
異なる動作をする。Rの遅延評価の例としては煩雑過ぎるが、HaskellのIOモナド
とサイドバイサイドに比較できる例になっている。
``` {r raskell}
do = pure = id = function (a) a;
const = function (a) function (ab) a;
`%.%` = function (bc, ab) function (a) bc (ab (a));
`%$%` = function (ab, a) ab (a);
`%>>%` = function (a, ab) ab (a);
inc = function (n) n + 1;
caty = function (a) cat (a, "\n", sep = "");
lhs = function (dump) function (x) do ({
y <- inc (x);
z <- caty (y);
pure %$% dump (y) (z);
});
rhs = function (dump) function (x) {
inc (x) %>>% (function (y) dump (y) %$% caty (y));
};
lhs (function (y) function (z) list (y, z)) (123) %>>% print
rhs (function (y) function (z) list (y, z)) (123) %>>% print
lhs (const %.% const ("hello")) (123) %>>% print;
rhs (const %.% const ("hello")) (123) %>>% print;
```
Rは関数の引数を問答無用に遅延評価するので、最後の`rhs`だけがHaskellと
異なる動作をする。Rの遅延評価の例としては煩雑過ぎるが、HaskellのIOモナド
とサイドバイサイドに比較できる例になっている。
619デフォルトの名無しさん
2021/01/05(火) 09:39:14.86ID:b/Fw/Z0P ふと思った。
a型の2次元配列が必要になった時、
[[a]] や Array (Int, Int) a ではなく、
(Int, Int) -> a が真っ先に思い浮かぶなら、
そいつは関数型にどっぷりハマってるな、と。
a型の2次元配列が必要になった時、
[[a]] や Array (Int, Int) a ではなく、
(Int, Int) -> a が真っ先に思い浮かぶなら、
そいつは関数型にどっぷりハマってるな、と。
620デフォルトの名無しさん
2021/01/08(金) 14:54:16.81ID:QDat+Qoy 関数型は並列処理に強いという話を聞くけど
fpgaの高位合成がC言語で行われている理由は何ですか?
haskellでの高位合成やgpgpuはどうなっていますか?
実用されていますか?
fpgaの高位合成がC言語で行われている理由は何ですか?
haskellでの高位合成やgpgpuはどうなっていますか?
実用されていますか?
621デフォルトの名無しさん
2021/01/08(金) 15:09:45.01ID:QDat+Qoy Haskellの人気は横ばいまたは下降気味。
なぜ未来であるはずのHaskellは勢いを持たない?
実際使ってる人達の印象はどうなの?
https://www.reddit.com/r/haskell/comments/iaxx7x/thoughts_on_how_to_measure_haskells_popularity/
https://trends.google.com/trends/explore?q=%2Fm%2F03j_q&date=all#TIMESERIES
https://insights.stackoverflow.com/trends?tags=haskell
なぜ未来であるはずのHaskellは勢いを持たない?
実際使ってる人達の印象はどうなの?
https://www.reddit.com/r/haskell/comments/iaxx7x/thoughts_on_how_to_measure_haskells_popularity/
https://trends.google.com/trends/explore?q=%2Fm%2F03j_q&date=all#TIMESERIES
https://insights.stackoverflow.com/trends?tags=haskell
622デフォルトの名無しさん
2021/01/08(金) 15:22:31.00ID:QDat+Qoy Haskellはアカデミックな言語だっていうけど
アカデミックな人がやることが多い機械学習でPythonが伸びた
並列処理に強いなら機械学習の行列処理がHaskellで行われても良かったんじゃないの?
アカデミックな人がやることが多い機械学習でPythonが伸びた
並列処理に強いなら機械学習の行列処理がHaskellで行われても良かったんじゃないの?
623デフォルトの名無しさん
2021/01/08(金) 18:33:26.91ID:rDTYcDTI Haskellは並行並列を楽に書けるのであって速く書くのに向いているわけではない(滅茶苦茶向いていない訳でもないがハードウェアに近い組には速度で勝つのは大変)
そしてDNNは内部処理がテンソル演算でこそあるけどインターフェイスでそこまでむき出しのテンソル演算をするのは多くない
なによりアカデミックは一枚岩ではなく当然色々幅が広くて
Haskellがアカデミックと呼ばれる所以は言語処理系や型理論、その実装の分野
並行並列が楽に書けるってのはその流れからくる、関数の純粋性とソフトウェアトランザクショナルメモリの成果
機械学習系の源流になる内の画像処理系ではC++やmatlabが、統計系はRやmatlabが使われててnumpyと共に徐々にPythonに移行してきた
ちょっと下のレイヤーのBLASやシミュレーションではC++とFortran、後にGPGPUの独擅場で今ではPythonから呼ばれる形で使われてる訳だ
そしてDNNは内部処理がテンソル演算でこそあるけどインターフェイスでそこまでむき出しのテンソル演算をするのは多くない
なによりアカデミックは一枚岩ではなく当然色々幅が広くて
Haskellがアカデミックと呼ばれる所以は言語処理系や型理論、その実装の分野
並行並列が楽に書けるってのはその流れからくる、関数の純粋性とソフトウェアトランザクショナルメモリの成果
機械学習系の源流になる内の画像処理系ではC++やmatlabが、統計系はRやmatlabが使われててnumpyと共に徐々にPythonに移行してきた
ちょっと下のレイヤーのBLASやシミュレーションではC++とFortran、後にGPGPUの独擅場で今ではPythonから呼ばれる形で使われてる訳だ
624デフォルトの名無しさん
2021/01/09(土) 00:06:52.64ID:cFb9Tw8T 機械学習はどっぷり工学分野だからアカデミックという印象は少ないイメージあるが
625デフォルトの名無しさん
2021/01/09(土) 16:47:47.44ID:gjIQ6YZR haskellについて調べてるんだけど
関数の合成は関数Aの返値と関数Bの引数の型が一致するとかの条件が必要?
解説記事に「関数はファンクタです」とか書かれてるんだけど
任意の関数を合成できるわけじゃないよね?
関数の合成は関数Aの返値と関数Bの引数の型が一致するとかの条件が必要?
解説記事に「関数はファンクタです」とか書かれてるんだけど
任意の関数を合成できるわけじゃないよね?
626デフォルトの名無しさん
2021/01/09(土) 17:24:37.63ID:Xoihvk5Y >>625
関数合成のシグネチャを見れば分かる
(.) :: (b -> c) -> (a -> b) -> a -> c
"bからcへの関数"と"aからbへの関数"を受け取り、"aからcへの関数"を返す関数が関数合成
関数合成のシグネチャを見れば分かる
(.) :: (b -> c) -> (a -> b) -> a -> c
"bからcへの関数"と"aからbへの関数"を受け取り、"aからcへの関数"を返す関数が関数合成
627デフォルトの名無しさん
2021/01/10(日) 13:23:32.27ID:/oGn2fPm ・Functorは高階カインドのクラスです
・二変数の型構築子(->)を部分適用したものがFunctorのインスタンスになります
この説明を省略したら意味がわからないよね
・二変数の型構築子(->)を部分適用したものがFunctorのインスタンスになります
この説明を省略したら意味がわからないよね
628デフォルトの名無しさん
2021/01/11(月) 01:34:20.58ID:OwjnhqSv 超大作過ぎるけど
[Entropy and Diversity](https://golem.ph.utexas.edu/category/2020/12/entropy_and_diversity_on_the_a.html)
[Entropy and Diversity](https://golem.ph.utexas.edu/category/2020/12/entropy_and_diversity_on_the_a.html)
629デフォルトの名無しさん
2021/01/11(月) 11:54:49.85ID:TrSsUTEh >>625
関数合成可能性の話と関数が関手であることは全く関係ないぞ
関数合成可能性の話と関数が関手であることは全く関係ないぞ
630デフォルトの名無しさん
2021/01/11(月) 13:43:32.73ID:nJc/cTVc Haskell 圏論
=====================
関数 射
Functor 関手
Reader r Hom関手
=====================
関数 射
Functor 関手
Reader r Hom関手
631デフォルトの名無しさん
2021/01/11(月) 16:14:02.10ID:nJc/cTVc H本終えたくらいの初心者が、中級上級それ以上を目指すためのロードマップって大体こんな感じ?
わたしは全部マスターしたわけじゃなくて、界隈でよく聞くのでなんか重要そうくらいのノリw
中級
・Freeモナド
・Profunctor optics
・コモナド
・Custom Prelude
上級
・型レベルプログラミング
・Extensible Effects
・Indexed Monads
・Template Haskell
わたしは全部マスターしたわけじゃなくて、界隈でよく聞くのでなんか重要そうくらいのノリw
中級
・Freeモナド
・Profunctor optics
・コモナド
・Custom Prelude
上級
・型レベルプログラミング
・Extensible Effects
・Indexed Monads
・Template Haskell
632デフォルトの名無しさん
2021/01/11(月) 23:19:18.98ID:N3ahWSVP まず何より先にアプリ作ろうよ。
先人たちはアプリを作りまくる過程で、
役立つテクニックや概念を編み出してきたのだから。
先人たちはアプリを作りまくる過程で、
役立つテクニックや概念を編み出してきたのだから。
633デフォルトの名無しさん
2021/01/12(火) 00:18:20.62ID:5J1t5Bxr Haskellは哲学であり、哲学からは何も生まれない
634デフォルトの名無しさん
2021/01/12(火) 01:04:23.78ID:exO7rD20635デフォルトの名無しさん
2021/01/12(火) 01:51:40.85ID:pX8tczV2 >>634
そうか、余計な事だった、すまない
そうか、余計な事だった、すまない
636デフォルトの名無しさん
2021/01/12(火) 09:05:11.74ID:IiGdAufF 哲学からは法が生まれますが…
637デフォルトの名無しさん
2021/01/12(火) 10:08:30.41ID:fccMRI32 何かを生まなければならないというのは道徳か?
その道徳から全てが始まるのか
その道徳から全てが始まるのか
638デフォルトの名無しさん
2021/01/13(水) 04:05:16.97ID:A4IGUr+p オタクのこういう会話クソキモい
639デフォルトの名無しさん
2021/01/13(水) 10:09:05.37ID:o5CAyZYI キモいという感情から
感情と知性の分断が生まれる
感情と知性の分断が生まれる
640デフォルトの名無しさん
2021/01/13(水) 10:21:18.95ID:8kUJEegp Haskell でカッコよく速いプログラム書きたいんですが、どう言う分野が向いてますか?
641デフォルトの名無しさん
2021/01/13(水) 21:12:21.98ID:DinE+zFR >>640
パズルソルバー
パズルソルバー
642デフォルトの名無しさん
2021/01/13(水) 22:41:38.73ID:CNkC++cr 感情は先入観から生じ
先入観を克服することで知性に至る
先入観を克服することで知性に至る
643デフォルトの名無しさん
2021/01/14(木) 00:13:44.79ID:JY+VfWVO でも先入観のメリットはスピードだから
速度の最適化みたいな建前を用意すれば知性と知性の対等な関係にはなる
建前はキモいとか本音がカッコイイとか言い出さない限り
速度の最適化みたいな建前を用意すれば知性と知性の対等な関係にはなる
建前はキモいとか本音がカッコイイとか言い出さない限り
644デフォルトの名無しさん
2021/01/14(木) 07:11:45.05ID:UC/QgsCt 感情のための知性が工学
知性のための知性が理学
知性のための知性が理学
645デフォルトの名無しさん
2021/01/14(木) 08:24:32.45ID:mp+NLhBe なんかやたらポエムを書きたがるレスが増えたな
646デフォルトの名無しさん
2021/01/14(木) 10:42:33.32ID:ApYxPV7C 音やリズムをデザインしてるのか
音読できない言文不一致言語があれば、デザインと論理的構造を分離できそう
音読できない言文不一致言語があれば、デザインと論理的構造を分離できそう
647デフォルトの名無しさん
2021/01/15(金) 04:12:13.96ID:NAFJshBl これ意見割れてるけどどっちが正しいの?
有識者諸君のご意見を伺いたい
https://www.quora.com/Is-functional-programming-most-likely-to-survive-transitions-to-different-CPU-architectures-like-post-von-neumann-ones
有識者諸君のご意見を伺いたい
https://www.quora.com/Is-functional-programming-most-likely-to-survive-transitions-to-different-CPU-architectures-like-post-von-neumann-ones
648デフォルトの名無しさん
2021/01/15(金) 10:43:33.32ID:l3Q+U92p 関数型を信じるというよりオブジェクト指向を疑うべき
オブジェクト間の通信がただの関数呼び出しから軽量スレッドに変わったらどうなるか等
オブジェクト間の通信がただの関数呼び出しから軽量スレッドに変わったらどうなるか等
649デフォルトの名無しさん
2021/01/15(金) 20:09:59.52ID:SSKXVcKf >>648
重たくなる。
重たくなる。
650デフォルトの名無しさん
2021/01/16(土) 10:01:48.97ID:fPN57ROF fix関数は least-defined な不動点を見つけるそうだけど、
この least-defined ってどういう意味?
この least-defined ってどういう意味?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【実況】博衣こよりのえちえち歌枠🧪
- 高市「発言は撤回しない。謝罪もするな。外務省局長!任せたぞ。」👈なにをさせたかったの?😲 [826239858]
- 【速報】51歳まで自衛隊になれるように法改正ww [347751896]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 自分に自信がない女の子、陽キャ美容室で80cmのエクステを付けた結果wwwwwwwwwwwwwwwwwww [329329848]
