関数型プログラミング言語Haskell Part33

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:17:36.49ID:L6eYQqyh
関数型プログラミング言語 Haskell について語るスレです。

Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/

前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
2021/04/06(火) 21:08:36.42ID:sYlI8eNJ
しかし>>795は怒られない
関数とか値コンストラクタとかclass名とかそれぞれの名前空間でちょっとずつ管理法がずれてるんだな
理由は知らんけど
2021/04/06(火) 22:30:07.58ID:sYlI8eNJ
いや>>800さんの言う通りだったかな?
コレ↓は通る
BoolがダメだったのはPreludeで読んでたからだな
ちゃんと修飾なしの場合Main moduleのコンストラクタが選ばれてる

import qualified System.Exit as S

data MyExitCode = ExitSuccess | ExitFailure Int

instance Show MyExitCode where
show ExitSuccess = "MyExitSuccess"
show ( ExitFailure x ) = "MyExitFailure " ++ ( show x )

main = do
print ExitSuccess
print S.ExitSuccess
print $ ExitFailure 12
print $ S.ExitFailure 12
2021/04/06(火) 22:52:08.72ID:vUIEomdt
>>796
エラーメッセージは省略せずに書いてほしい
2021/04/07(水) 15:24:37.74
module BinaryRepresentation.Word8 (
  BiRep8( Rep)
)
where
import Data.Word( Word8)


newtype BiRep8 = Rep Word8

instance Show BiRep8 where
  show a = show' 8 a ""
   where
    show' 0 _ s = s
    show' count (Rep w8) s =
     let
      (q,r) = w8 `quotRem` 2
     in
      show' (count-1) (Rep q) (r `shows` s)
---------↑binary_representation8.hs-----------------------------
2021/04/07(水) 15:24:59.63
module BinaryRepresentation.IPAddress(
  IPv4Address,
  BiRepIPv4Address( Rep),
  makeIPv4
) where
import Data.Word( Word8)
import Data.List( intersperse)
import BinaryRepresentation.Word8( BiRep8( Rep))
import qualified BinaryRepresentation.Word8 as Bi8


newtype IPv4Address = A (Word8, Word8, Word8, Word8)

ipshow::Show s=> (Word8->s) -> [Word8] -> String
ipshow f list = concat . intersperse "." $ (show . f) <$> list

instance Show IPv4Address where
  show (A (_1,_2,_3,_4)) = ipshow id [_1,_2,_3,_4]


newtype BiRepIPv4Address = Rep IPv4Address

instance Show BiRepIPv4Address where
  show (Rep (A (_1,_2,_3,_4)))
   =
    ipshow Bi8.Rep [_1,_2,_3,_4]


makeIPv4::Word8 -> Word8 -> Word8 -> Word8 -> IPv4Address
makeIPv4 _1 _2 _3 _4 = A (_1, _2, _3, _4)
-----------↑binary_representation_ipv4.hs------------------------
2021/04/07(水) 15:25:15.94
[2 of 2] Compiling BinaryRepresentation.IPAddress ( binary_representation_ipv4.hs, binary_representation_ipv4.o )

binary_representation_ipv4.hs:24:11: error:
  Ambiguous occurrence ‘Rep’
  It could refer to
   either ‘BinaryRepresentation.Word8.Rep’,
       imported from ‘BinaryRepresentation.Word8’ at binary_representation_ipv4.hs:8:36-47
     or ‘BinaryRepresentation.IPAddress.Rep’,
       defined at binary_representation_ipv4.hs:21:28
  |
24 |   show (Rep (A (_1,_2,_3,_4)))
  |      ^^^
------------------------------------------------
意図:Word8 値を01表記で表現するモジュールを作り、それを用いてIPv4アドレスを01表記で表現する
問題:binary_representation_ipv4.hs のRepが、binary_representation8.hs のRepと被りAmbiguousである
判明しているワークアラウンド:24行目のRep を BinaryRepresentation.IPAddress.Rep という糞ダサコードへ書き換える
望む事:修飾せずに済ますか、短い修飾で済ませたい
2021/04/07(水) 15:51:36.65ID:6KWn3Zlg
import BinaryRepresentation.Word8( BiRep8( Rep))
↑これ何?消せば?
2021/04/07(水) 18:16:48.26
はわわ。。。通りました
下手にimport書いたせいで通らなくなるとかあるんですね
蛇足importと名付けて教訓にします。ありがとうございました
2021/04/07(水) 23:07:15.55ID:PA0bBjRm
>>808
勘でコード書いてるのかよw
2021/04/13(火) 20:07:55.95ID:WnmkLZut
>>808
> 下手にimport書いたせいで通らなくなるとかあるんですね

ちょ・・・・
2021/04/16(金) 21:11:12.10ID:trr1lKH1
"http2" library v3.0.0 in Haskell has been released
2021/04/16(金) 21:38:11.49ID:gUR6Epkt
>>794
型駆動開発(TDD)はidris作者が本出してるけどそれのことかいな?

であれば予想してるように依存型前提よ
パターンマッチはデータ構築子に沿って分解してるだけだから
(x:xs)だけじゃなくて(xs++[x])でパターンマッチできるようにSQLよろしく型レベルのウインドウ関数つくりましょう
IDEにコード生成させましょう
とかって大変楽しい本だった
2021/04/17(土) 18:14:21.16ID:+4ymujjn
リストを使って漸化式
r_n = max_{1 <= i < n} (p_i + r_{n-i}), r_0 = 0
を解くプログラムを書いたのですがリストをArrayに変えたとたん動かなくなりました
どうやらmax'にifが使われているのが原因のようなのですが動かなくなる理由が分かりません
どなたか分かる方いますか?
プログラムは以下の通りです
import Data.Array

p = [1,5,8,9,10,17,17,20,24,30]

max' (i,q) (i',q') = if q < q' then (i',q') else (i,q)

solver p = array (0,length p) $ (0,0):[ -- 動かない
  foldr1 max' [(i, p !! (i-1) + rs ! (j-i)) | i <- [1..j]]
  | j <- [1..length p]
 ] where rs = solver p

solver' p = (0,0):[ -- 動く
  foldr1 max' [(i, p !! (i-1) + (snd $ rs' !! (j-i))) | i <- [1..j]]
  | j <- [1..length p]
 ] where rs' = solver' p
2021/04/17(土) 18:16:48.86ID:+4ymujjn
動かないと言うのはghciに入力すると結果がいつまで経っても出力されない状況を指します
2021/05/09(日) 10:31:13.12ID:y0UqG5zB
なんでみんなhaskellでアプリ作らないの?
2021/05/09(日) 13:13:30.99
すいません、Microsoft TrueSkill レーティングシステムのHaskell実装を探しているのですが見つかりません
イロレーティングとグリコレーティングしかありません
TrueSkillを実装したライブラリを知ってる方がいたら教えてください
2021/05/09(日) 22:22:49.79ID:HZ/HWpqa
Haskellでアプリ作ろうにもopenglくらいしかまともなバインディングないんじゃなかったっけ?
じぶんでラップするのだるいし
おれはもうf#で作ることにしたよ
2021/05/09(日) 22:24:00.80ID:HZ/HWpqa
あ、デスクトップアプリのことだと思ってたけど違うんかね
2021/05/10(月) 00:08:10.35ID:fW0+gsWX
パターンマッチでRustみたいに
match x {
Some(SeqCst)=>true,
Some(Relaxed)=>true,
_=>false
}

match x {
Some(SeqCst|Relaxed)=>true,
_=>false
}
って感じで書く方法ってある?
2021/05/10(月) 05:06:07.73ID:XvUHL9Z9
haskellでmatchってあるの?
2021/05/11(火) 11:45:43.79ID:cKOIjnA7
>>820
標準ライブラリにはないけどhackageとかにはある

https://hackage.haskell.org/package/regex-compat-0.95.2.1/docs/Text-Regex.html

解説も転がってる

https://sirocco.hatenadiary.org/entry/20090416/1239852340
2021/05/11(火) 11:48:38.64ID:cKOIjnA7
あ、matchって正規表現のmatchじゃなくて?
質問内容がふわふわしすぎで何がしたいのかさっぱり分からん
2021/05/11(火) 11:53:57.18ID:+XHXxVLE
すまん自己解決したわ
or patternsのことを言ってたんだけどissueに上がってるだけで未実装っぽい
https://gitlab.haskell.org/ghc/ghc/-/issues/3919
2021/05/14(金) 16:46:12.69
時期に ARM CPUを載せた端末で 走る Haskell 製ソフトを公式に吐き出せるようになるんです?
2021/05/15(土) 10:53:50.63ID:NqYfkIUy
CPUとHaskellって
まるで中世からいきなりポストモダンに飛んでるみたいな世界観だな
2021/05/15(土) 11:35:40.38ID:DozosAnh
たとえばC言語習いたての難しいと思う理由は、
コンピューターならこれくらいできるだろうと思ってた所に全然届いてなくて
そこを全部自分で埋めなきゃならないことを認識するのに時間がかかること
代数的なHaskewllがデフォならすんなり学習できるかもな
逆に今はCに適応しすぎてHaskellに苦労する
2021/05/15(土) 12:48:56.18ID:NqYfkIUy
>>826
これくらいできるだろうというのは楽観的すぎて苦労するパターンだ
悲観的な方が認識に時間がかからない

Cに適応しすぎているという認識は本当に正しいのか?
ここでも楽観と悲観が対立する
2021/05/21(金) 15:54:58.85
長く時間がかかるプログラムを走らせた時、タスクマネージャーを眺めると、少数のコアに高負荷、残り全コアに低負荷がかかってるみたいなのですが
実行時に使用コア数は指定していないことから推測すると、ガベコレは全コアで稼働するってことでしょうか?
2021/05/22(土) 13:34:14.84ID:hkOb3/u2
Haskellのは単にシングルスレッドで回収してるだけだぞ
2021/05/22(土) 20:46:21.69
え、じゃあなんで全コア低負荷になったんだろ・・・
数分毎に階段のようにRAM使用量が数GBずつ増えて行って
長い処理が終了する直前に全コアフル稼働になって、直後に処理終了になったから
ガベコレが関与してると思ったんですがね
2021/05/22(土) 21:35:55.30ID:aaz7cUPO
サンクが溜まってって最後に遅延してそれらを評価したのでは
というかパフォーマンスの話は変に予測立てたり先入観あったりするとろくなことないからもっと詳細にプロファイリングしたほうが
2021/05/22(土) 21:58:08.22ID:Up5XEM4X
ガベコレ以外に考えられる原因が2つぐらいあったら
ガベコレが原因である確率は1/3ぐらいだから
2/3の方が勝ちそう
2021/05/29(土) 14:13:39.92ID:SnGl3AHf
win10でstackとかghcそのものは正常に入るんたけどパッケージのコンパイルが絡んでくるとどうも文字コードが原因でコケる
LANG=asciiにすると挙動が変わってくるんだけど、何にしとくのが正解なんだろ
834デフォルトの名無しさん
垢版 |
2021/05/29(土) 16:46:49.24ID:1zrkc3qO
100万要素の配列の1要素を更新するために配列の再作成が必要?
https://www.quora.com/Is-Haskell-as-fast-as-C++-If-not-why-not/answer/James-Hollis-19
> Haskell naturally operates on lists, but is rather awkward with arrays. Pure functions do not modify their input, so a pure function that changes one element of a million element array will copy 999,999 elements into a second array and return that. You can get around this with monads, but you end up writing imperative code in something that is less flexible than real imperative code.

これをモナドとアクションで解決できる?どうやるのか?
2021/05/30(日) 20:49:58.16ID:QwiNWDL1
STArrayなりMutable Vectorなり使えば良いのでは
2021/05/30(日) 22:25:02.60ID:F1Ogq3BP
Unsafe でok
所詮物理的にはハードウェア上で動いてるのだから、
副作用なしなんてただの幻想よ
2021/05/31(月) 09:29:30.68ID:O6iiWxP2
副作用の意味を勘違いしていないといいのだけれど・・・
2021/05/31(月) 10:43:40.87ID:xvi5eoqv
Rustと同じように、どうにかして型を弱くすれば副作用は好きなだけ使えるよ
2021/06/01(火) 02:01:57.33ID:4I1ndF8a
IOモナドやSTモナドの中でファイル操作したり現在時刻取って来たりしても問題無いわけだしわざわざ型犠牲にしなくても良いんじゃない
2021/06/01(火) 10:15:13.07ID:UuHFoCEt
書き方が何通りもあってコンパイルが通るのは客観的事実だよ
そんな書き方しなくても良いというのはまあ政治的にはそうなるわけだが
コンパイルエラーにならないのに、バラモンみたいな人間に色々言われると混乱しやすい
841デフォルトの名無しさん
垢版 |
2021/06/01(火) 22:12:35.15ID:HETOiJgb
自然に書いたhaskellコードが極端に遅いという2018年の記事
https://pl-rants.net/posts/haskell-vs-go-vs-ocaml-vs/
2021/06/03(木) 20:42:08.53ID:/+9iJa2F
>>833
自己解決
language-javascriptパッケージのソースのコメントに∉記号がutf8で入ってて、環境によっては違うエンコードで読み込んでエラーになるっぽい
誰かが開発者にワークアラウンドとしてコメントをasciiで書き直してくれとリクエストしてたけど、ビルド環境を整えるのはstackの仕事だから俺は知らんと一蹴されてた
まぁそりゃそうなんだけどさ...
2021/06/05(土) 01:35:57.62ID:qvRyjOjC
>>842
なんという罠…
これ引っかかった人結構いそう
2021/06/05(土) 12:32:22.17ID:aDKd5nip
プログラミング最大の罠のひとつ
自分で創作するよりも他人のソースを読む方が難しい
2021/06/07(月) 12:42:09.06ID:k7DmZ27b
昨日の自分は他人です
2021/06/07(月) 20:28:43.19ID:qbMAaCDK
去年書いたコードが理解できない
2021/06/07(月) 22:37:59.06ID:+U7TScWJ
そりゃあ人間の能力は老化とともに衰えるから仕方ないね
2021/06/07(月) 22:55:42.12ID:OC0V43xk
ここ1, 2年で自分が書いたソースが回ってくることがあるけどほとんど覚えていなかった
今から振り返るともっといいやり方が思いつくけど、他人が書いたコードより遥かに行儀が良くて読みやすかった
2021/07/01(木) 09:54:29.98ID:yiVYCTXd
Hmatrixはcabalで入れたのにghciから:m Numeric.LinearAlgebraや
import Numeric.LinearAlgebraで行列演算モジュールを入れようとすると、

<no location info>: error:
Could not find module ‘Numeric.LinearAlgebra’
Perhaps you haven't installed the "dyn" libraries for package ‘hmatrix-0.20.2’?
Use -v to see a list of the files searched for.

とエラーが出るのだけど、よく分からない。ホームディレクトリにHmatrixのファイルっぽい
ものを置いてもダメ。Numericのフォルダをホームディレクトリに置いてもダメ

分かる人、教えてくださいm(_ _)m

古いパソコンの仮想linuxに入っている奴はimport Numeric.LinearAlgebraで
通常通り動くけど、その他のPCでは動かないんだよね。前は動いていたのもあったけど
ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった

関数型言語で行列演算さえ、導入にこれだけ苦労するとは、どういうことだいw
2021/07/01(木) 13:56:29.22ID:m444U3IV
> ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった
ちゃんとドキュメント読んでないよね?
2021/07/01(木) 18:53:55.58ID:dccggDtp
ghciでimportを複数すると、プロンプトが
Prelude Data.Monoid Data.Traversable Data.Foldable>
と長くなってしまうので、importしたの表示しないようにするにはどうしたらいいのですか?
2021/07/01(木) 18:56:14.18ID:dccggDtp
すまん、自己解決した
:set promptを使えばいいのか
promptでググれば良かった
2021/07/01(木) 22:45:34.96ID:FFAeznD4
quarifiedも使えるよ
お好みで
2021/07/02(金) 03:41:23.49ID:aoQxpJoS
>>849
ghciのコマンドライン引数に、使用したいパッケージを指定するものがなかったっけ?
baseパッケージ以外はちゃんと引数で明示しないとghci上で使えなかったような気がする。
2021/07/10(土) 00:45:51.28ID:FlY7oUIG
すいません
質問させて下さい
Ghc.Types というのを眺めてたんですが
謎の#が入ってるコンストラクターがいっぱい見えます

data {-# CTYPE "HsInt" #-} Int = I# Int#
data {-# CTYPE "HsDouble" #-} Double = D# Double#
newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))

などなど
なんですかコレ?
一方でたとえばDoubleはReal classに属してるのでsinとかlogとかの処理をどこかでやってると思うのですがどこにも見つけられません
もちろんこんなプリミティブな演算はHaskellではなくCとかに丸投げしてるんでしょうけどその手の宣言なりなんなりはないもんなんですか?
2021/07/10(土) 08:27:37.09ID:9m9xryS6
https://wiki.haskell.org/Unboxed_type
記事内リンクも見てね
2021/07/10(土) 09:09:34.41ID:Qo9dk8cs
>>856
なるほど
まだよくわかってないですけどunboxed typeというやつなんですね
後半もどなたか分かりませんか?
実は事情で“多倍長の浮動小数点”を自作したいのです
そのためにはReal型にしなくてはならずsinとなlogとか結構ある数の関数を実装する必要があります
どこかに参考にできるライブラリ転がってませんか?
性能は求めないので多倍長精度の計算ができるReal型を実装してる例が欲しいです
2021/07/10(土) 09:23:00.75ID:Qo9dk8cs
間違えた
Float classがsinとかいっぱいあって難しいです
2021/07/10(土) 09:25:56.65ID:Qo9dk8cs
違う
Floating
orz
2021/07/10(土) 12:08:32.98ID:5i+2sdHC
https://github.com/ghc/ghc/blob/master/libraries/base/GHC/Float.hs#L588
ライブラリがありそうな気がするけど、ghcクローンしてやりたいことできるか調べてみたら
2021/07/10(土) 12:28:39.86ID:5i+2sdHC
hackageをfloatで検索した結果。怪しそうなやつ:
https://hackage.haskell.org/package/variable-precision
https://hackage.haskell.org/package/AERN-Real-Interval
2021/07/10(土) 23:01:22.87ID:zugIw5Ja
あざっす
ソース読んで研究しまつ
2021/07/11(日) 06:49:31.34
リストのシャッフルは、2値ランダムと分割統治法で構成できるという境地に至った
2021/07/11(日) 16:41:58.17ID:KhXXWhgG
余談だけど
オードリー・タン氏に性的に食指が動く
男性っているのかな。
865デフォルトの名無しさん
垢版 |
2021/07/16(金) 17:38:36.16
あののののの! なんで型コンストラクタ名が被ったらいけないんですか!
型が違うならそのコンストラクタ名くらい被ったっていいじゃないですか!
866デフォルトの名無しさん
垢版 |
2021/07/16(金) 23:35:14.79
Esqueleto では SELECT 〜 FROM ONLY an_table 〜 みたいに ONLY を付けることで継承テーブルを対称から外すように指示することはできないんですか?
生SQLを書くしかありませんか?
867デフォルトの名無しさん
垢版 |
2021/07/17(土) 15:02:59.17ID:eTC1af8g
>>864
ちょまどは鳳唐好きだって言ってた
2021/07/17(土) 17:39:27.65ID:44fEdIj7
私は、MBAを取るために、ハワイにある伝統的なビジネススクールに通っていたとき、どこかの大企業で
働く中間管理職が教えるマネジメント「論」や経済「論」を学ぼうとしている自分に気付いた。
ビジネス経験のない先生は、学校制度の外に一度も出たことがない人だ。つまり彼は、5歳で幼稚園に入ってから
ずっと学校制度の中にいるにもかかわらず、学生たちに実社会について教えようとしていることだ。
とんだお笑い草だと思った。
講師陣や中間管理職や教師のほとんどは、ゼロからビジネスを立ち上げるのに何が必要なのかについては何も知らなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P62〜63

彼らのほとんどは、学校という象牙の塔を出ると、企業社会という象牙の塔に入った。
安定した仕事と給料に依存していた。つまり、素晴らしいビジネス論をもっている人は
たくさんいたが、現実の世界でビジネスをゼロから立ち上げ、大きな富を蓄えるのを可能にする、
素晴らしいビジネススキルのある人はほとんどいなかったということだ。
彼らのほとんどは給料なしで生きていけなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P63
2021/07/17(土) 18:54:41.40ID:lhv7ZvYo
言語設計者に対する悪口はそこまでにしてやれ
2021/07/18(日) 08:48:06.51ID:p5uFvWrN
まあ、生きていけないぞー死ぬぞーってのが机上の空論の中でも最悪の論だよな
実際には死なない人が多い
2021/07/18(日) 22:53:21.56
すいません、僕がスレを軽率に上げてしまったばっかりにワードサラダBOTの餌食なってしまうとは・・・
2021/07/19(月) 09:08:56.51ID:Niob4uA5
現状これはとりあえず有効にしとけみたいなGHC拡張ってなにがありますか
2021/07/19(月) 10:46:43.62ID:jaES3hbu
>>872
無いです。
必要なときにのみ必要なだけ宣言するといいです。
2021/07/26(月) 04:08:52.62ID:FlIQ/SVE
ttps://cognicull.com/ja
Haskellやるのにこの辺は履修済みであることが求められるの?
Obj-Cだとほぼなくてもアプリは書けるけども
Haskellって数学じゃないのに数学のフリしてるところあるよね
利用者も然りで余計混乱を招いてる気がする
2021/07/26(月) 12:01:28.04ID:nPPC7Onz
>>874
うーん、書きたいプログラムの内容によるとしか言えないかな
こうしたことがわからないとHaskellのプログラムが書けないということはない
そのあたりはObjective-Cと同じ
2021/07/27(火) 03:35:04.64
Data.Arrayって廃止されたの?
GHC.Arr を使えってこと?
2021/07/27(火) 05:37:33.58ID:O4N47kXx
>>876
Data.Array は array パッケージにあります。
2021/07/27(火) 15:27:28.97ID:6BJr6nx6
>>874
フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う
利用者も然りなのはむしろ良い傾向
他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
2021/07/28(水) 02:22:30.38
>>877
詳しい情報サンクス
2021/07/30(金) 13:54:44.53ID:kX7UidPf
>>874
Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
2021/07/30(金) 14:32:21.44ID:yBIo03BR
すごいHaskellに素晴らしい数学の解説書ってレビューがついてた時はクスっと来たけど
2021/08/02(月) 07:34:32.07ID:Rllz2LO9
例えばOOPの継承関係を否定する
否定するなら対案を出せと言われる
この過程は数学ではないけど結果的には半順序関係とか圏とか出てくる
883デフォルトの名無しさん
垢版 |
2021/08/16(月) 04:30:28.47ID:aZY1/RTa
純粋関数型でキャッシュは実装可能?

例えばOOPでは計算に時間がかかる値はキャッシュしておいて次の読み取りで
キャッシュから返すという事ができる。
このキャッシュの管理をOOPらしいカプセル化によってまともに実装できる
2021/08/16(月) 18:24:35.56ID:O8pAbV/G
>>883
可能です。
memoization をキーワードに調べてみてください。
2021/08/18(水) 20:19:16.73ID:MamsdVYI
>>66
オブジェクト指向プログラミングにおける Smalltalk 的な位置づけに来るんじゃないかな。

ガッチガチだから強制的に「その概念」に染まれる。
2021/08/19(木) 00:24:27.59ID:anV9aH6F
低級言語でインタプリタを作れそうなシェルスクリプト的な位置づけだよ
単一の高級言語を強制されない
2021/08/19(木) 16:00:36.29ID:IKqVi/r3
関数型言語ってリストとかツリーみたいな再帰的なデータ構造扱うのは得意だけど
有向・無向グラフ(のアルゴリズム)扱うの難しくない?
2021/08/19(木) 18:40:13.11ID:JntO5v5E
>>887
難しいと感じるかどうかは本人の気持ちなので何とも言えません。

ただ、haskellでのグラフ理論の扱いに関しては、
カジュアルな解説もフォーマルな論文もたくさんあります。
ライブラリもあります。

扱ったことはないけど、何となくイメージだけで
難しそうだ、
haskellの苦手分野だと思っているのであれば、
自分に読めそうな記事にいくつかトライしてみてはどうでしょうか。
2021/08/19(木) 21:01:34.14ID:anV9aH6F
>>887
Erlangのようなメッセージ送信を考えればわかるが
メモリを共有していない相手にも送れるデータ構造が得意

メッセージとして文字列ばかり使ってるとカプセル化も型情報も無駄になる
だから文字列に似ているが異なるデータ構造が役に立つ
2021/08/25(水) 21:36:21.14ID:NimliznV
Applicativeの(*>)演算って何の意味があるの?
第一引数はどうせ捨てられるんでしょ。
2021/08/25(水) 23:09:37.51ID:SkXNk2uR
確かに左辺 :: f aで言うところのa型の値は捨てるが
Maybeとか[]みたいな直和型でどの値コンストラクタを使って構築されたかの情報は影響するよ
2021/08/26(木) 21:35:42.38ID:Wv9PZvrP
>>891
それは第1引数をパターンマッチすることで、たとえ第2引数が同じ値でも、
(*>)の計算結果を変えられることに意味があるってこと?

Sum型やProduct型もApplicativeのインスタンスになってるけど、
これらだと(*>)には意味がない?
(当然(<*>)など他の演算には意味があると思うけど)
2021/08/28(土) 14:58:50.16ID:WIQMD65A
>>890
Parsecで左辺の句がいらないときに使う
2021/09/01(水) 17:56:43.60
ぼくようメモ:
OpenSUSE でPostgreSQLを使用した開発をしていてstack buildで
postgresql-libpq パッケージを途中にビルドする際
pg_config が無いと言われコケることがある

背景: OpenSUSE は postgres-devel から pg_config を削除した。我々は libpq.pc を代わりに使うべきである。
ソース: https://redmine.lighttpd.net/issues/2965

解決法:

stack build --flag postgresql-libpq:use-pkg-config
としてビルドする
2021/09/08(水) 22:14:55.40
そうか!Trueskill のHaskell実装がなくて論文読んで自分で実装する力がなくても
Haskellから実行時にbash 呼び出してPython3 のTrueskillライブラリに標準入力でPythonコードを流し込んで
演算結果を文字列で貰ってきて、それをParserCombinatorで作った字句解析器で読み取ってHaskellのデータに戻せばいいじゃん
あたいったら天才ね!
2021/09/09(木) 09:49:18.76ID:rktYy8hS
s/天才/脳筋/
2021/09/10(金) 01:55:27.29ID:bkZL74IR
関数定義の左辺の部分的で、関数名と仮引数名の後の | と = の間の部分って何て名称だっけ?

f x y | x < y = ...

これの x < y の部分。
あるいは関数定義をこう書く方法の呼び方とか。

この文法や制限などをネットで調べたいんだけど、
名称が思い出せず検索に難儀してる。
できれば英語でお願い。
2021/09/10(金) 03:22:07.48ID:bkZL74IR
>>897
すまん、思い出した、guard だ。
2021/09/10(金) 22:23:35.11ID:kwXNo1Gk
>>896
g を忘れてね?
2021/09/22(水) 10:43:55.15ID:02VLVXq+
パターンの質問です

Rational型の数が平方数であるかどうか判定するプログラムで

isSquare r = r >= 0 && r == ( sqrtR r )^2
sqrtI = truncate . sqrt . fromInteger
sqrtR r = let
( a, b ) = ( numerator r, denominator r )
in ( sqrtI a ) % ( sqrtI b )

というのを書きました
もちろんこれはうまくいきます

しかし numerator, denominator をいちいち取り出すのが鬱陶しいので

sqrtR ( a :% b ) = ( sqrtI a ) % ( sqrtI b ) ------- @

と書きたかったのですがうまくいきません
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況