[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 07/21 14:46 / Filesize : 290 KB / Number-of Response : 1014
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 23:43:54.28 ID:Vh4eztBk.net]
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
echo.2ch.net/test/read.cgi/tech/1428597032/

552 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:07:05.22 ID:lBtW1IaY.net]
両方名うてのキチガイやないかw

553 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:08:41.81 ID:lBtW1IaY.net]
ちなみにHaskellerがおかしいというよりは
CS業界が全般に発達障害とキチガイに寛容なだけ

554 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:25:10.56 ID:NDbIiRhl.net]
東大京大

555 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:47:10.88 ID:NDbIiRhl.net]
>>539
片方はGHCの機能追加してるガチ勢だぞ
単純な言語拡張も知らない分際でコード語ってないとかのたまってるやつ恥ずかしすぎる

556 名前:デフォルトの名無しさん mailto:age [2017/05/26(金) 11:08:43.28 ID:7I4ytZjC.net]
fumieval知らないとかモグリにもほどがある
自称関数型コミュニティでは超有名人

557 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 11:51:40.04 ID:lBtW1IaY.net]
>>548
>片方はGHCの機能追加してるガチ勢だぞ

そうだっけ?
なんかしょうもない型クラスのインスタンス追加して喜んでた記憶しかないわ

558 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 12:25:49.52 ID:npmNm3qp.net]
なにかHaskellにはそういう魔力めいた魅力でもあるのでしょうか

559 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 14:22:36.33 ID:ck4pDWmC.net]
関数脳になるとHaskellが癖になるのは確か。

オブジェクト指向のメソッドチェーンも入力->出力の連鎖で、関数型と同じなんだけど、ループや分岐も再帰やパターンマッチで書くから、より入力->出力に専念出来る。
思考がシンプルになる。

オブジェクト指向も思考をシンプルにする事を目指してるけど、クラス作る側とクラス使う側で大きな溝が出来てしまった。

560 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 16:33:50.74 ID:kKmQOK+/.net]
良くも悪くも変人しかHaskellなんて覚えようと思わないからじゃないかな
明らかに文法が異質だもの
多分みんな人生で何度か「変わってるね」って言われたことあるはず



561 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 17:33:52.44 ID:ZKqulABJ.net]
変わってると言えば否定しないけど、どの言語にもおいらみたいなのは一部居るんじゃないかな。

強いて言えばPythonやRubyにさえも挫折したおいらがHaskellで色々書けるようになって、書けるようになってからはPythonやRubyでも書けるようになって、Cでも書けるようにもなった。
例えばRubyのeach_slice相当の関数はHaskellに存在しない。
(Hoogleで調べても無かった)
でも、動きを理解さえすればすぐに同じ動きの関数が書けた。
PythonやRubyは基本が手続き型言語だから、ライブラリを知らないとか、ライブラリに存在しない時に急に難しくなる。

おいらみたいに、LLでさえ手続き型言語で挫折した人がHaskellで出来るようになって、はしゃいでるとかは有るかもね。

562 名前:デフォルトの名無しさん [2017/05/26(金) 17:41:46.50 ID:57q7qnDF.net]
例の包丁Haskellerもそうだが、使っている奴は厨二病患者が多い
本当に厨二心をくすぐる言語なんだよ…
OCamlメインの俺としては変なのがこっちに吸われていて助かる

563 名前:デフォルトの名無しさん [2017/05/26(金) 18:45:55.29 ID:ZQcANW7U.net]
変数も引数なしの値を返す関数。
a = 1

モナドもセクションにすればただの関数。
import System.Environment

slice n xs | length xs < n || n <= 0 = []
slice n xs = ys:slice n zs
where
(ys,zs) = splitAt n xs

main = (>>=) getArgs (print.slice 2)

そういう意味で、mainすらも引数なしでプログラムの結果を返す関数。
全てが関数と型と値だけで考えられる。
厨二で上等。
一貫した考えが素晴らしいね。
煩わしさがない。

564 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 18:49:06.98 ID:sZfcErOL.net]
なぜ自分は変じゃないと思えるのか……

565 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 18:49:10.19 ID:ulIxfp/C.net]
OCamlはラクダだもんな。厨二病もクソもないw
OcamlとかClojureはコードが丸い印象。Haskellは何か尖ってるよね。

566 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 18:50:59.74 ID:40xXL869.net]
コメントが (* *) だからさ

567 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 19:01:21.32 ID:ZQcANW7U.net]
>>557
え、否定しないって言ってるじゃん。
認めてるじゃん。

568 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 19:40:17.16 ID:xBragGUI.net]
>>556
セクションは部分適用した二項演算子のことだぞ

569 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 20:51:35.80 ID:ovKX6RUR.net]
あれ、どっちもセクションじゃ無かったっけ?と久しぶりに調べたら。。。
前置き形式?で良いのかな?
これは済まんかった。

570 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:07:05.78 ID:lBtW1IaY.net]
>>553
>良くも悪くも変人しかHaskellなんて覚えようと思わないからじゃないかな
>明らかに文法が異質だもの

ML系のワリと平凡な文法なんだけどね



571 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:28:16.56 ID:TC/C61F7.net]
変な文法と言えばPrologとかJ言語とか

572 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:36:15.75 ID:ovKX6RUR.net]
>>558
OCamlもHaskellも同じML系なのにどうしてそう感じたんだろう?
おいらみたいな使ってるやつの印象ってだけだったり?
おいらみたいなのは少数派だよ。
声が大きいから、たくさん居るように感じるだけ。

573 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:41:20.55 ID:0YCuYapQ.net]
すみません、質問です
f :: a -> b と g :: a -> c があったときに
\x -> (f x, g x) に相当する関数はライブラリに用意されてますか?

574 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:01:30.73 ID:ovKX6RUR.net]
>>564
Jは聞いた事はあっても触った事すらないので何とも言えないが、Prologは昔の関数型言語の本では次世代言語として紹介されてたな。
実際触って見て可能性自体は感じるんだが、引数が大文字始まりじゃないとダメとか、計算式が=じゃなくてisとかが、とにかく愛せなかった。。。

Prolog得意の家系図関数も、Prologなら自動で関係を見つけるのをHaskellだと家系図をモデルとした仕様書いて、関係性のルール見抜いて仕様にして、そのまま家系図をデータ型に、関係性のルールを関数にする。

関数はルールの条件を箇条書きすればそのままパターンマッチの関数になる。
この辺が手続き型言語に対するアドバンテージであり、Prologに対して見劣りする所。

でも関係性のルールを見抜く作業と、関数作る作業が私にとっては楽しいのでそれで良い。

575 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:03:34.66 ID:EgTlEiWL.net]
>>566
Control.Arrow の (&&&) だ。

576 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:07:24.39 ID:ovKX6RUR.net]
>>566
型でHoogle検索して見ては?
探すより作った方が早そうだが。

dfunc f g x = (f x, g x)

577 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:16:23.90 ID:0YCuYapQ.net]
>>569
(a -> b) -> (a -> c) -> a -> (b, c) とかで検索しても出なかったんですが
検索の仕方が悪かったのかな

>>568
そんな関数があったんですね、勉強になりました
ありがとうございます

578 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:34:36.00 ID:ovKX6RUR.net]
>>568
演算子としての使い方分からなくてググったわw
ほへー。。。
Arrowって基本こう使うのね。
こりゃHaskell分かりにくいってなる訳だよ。

579 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 23:18:50.05 ID:npmNm3qp.net]
型シグネチャから利用法読み解くのはIQモンスターでないと無理
設計者の思想を語ってもらわないと

580 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 23:54:53.85 ID:nlWdhydN.net]
結局>>566は解決したんかな。。。
用途に合わせて自作した方が早いし読みやすいと思うんだが。

格好いいからって過剰にArrow使ったりってのもなぁ。
もうそっちのが慣れてて早いんなら別だが。



581 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 00:13:32.94 ID:ChWjXNtT.net]
データフローを記述するようなコードならArrow使えばいい

582 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 00:28:51.27 ID:Cj0QDtYS.net]
そうね。
逆にxと関数のリスト二つ受け取って、(f x, g x)のリストを得るとかだと引数の順番好きに選べる普通の関数のが良いと思う。

dfunc x f g = (f x, g f)

なりそう言うラムダ式をmapのリスト二つ版(仮にmap2)を作って渡せば良い。

結局>>566が何をしたかったかによる。

583 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 01:16:44.64 ID:BlrnYoHB.net]
Control.ApplicativeのliftA2を使って
liftA2 (,) f g
でもいけるよ。

584 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 07:13:42.02 ID:BlrnYoHB.net]
昨日の事件について、意見を書いた
anond.hatelabo.jp/20140515010237

585 名前:デフォルトの名無しさん [2017/05/27(土) 08:54:38.45 ID:pQ5DUsdI.net]
>>539
頭悪い会話すぎて笑った

586 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 08:59:16.85 ID:ChWjXNtT.net]
>>576
>liftA2 (,) f g

あー、関数アプリカティブか。

587 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 10:15:02.70 ID:y8N3m0Nz.net]
>>572
型だろうが思想だろうが同じこと
コードを1行も書かなくても分かり合えるのはIQモンスターだけ

588 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 10:32:14.53 ID:C4ObyqB4.net]
おまいらが楽する分Haskellコンパイラの
作成が激ムズになる件。

589 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 10:59:01.67 ID:y8N3m0Nz.net]
>>573
格好いいからじゃなくて
Monadはカリー化を過剰に使ってるからタプルを使わない
だからタプルに関係のあるものはArrowの方に集まってくる

590 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 12:15:10.10 ID:yeXCnzln.net]
>>582
そういう理由で使われてたのか
理論的にArrowベースのことやってるのかと思ってた



591 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 12:23:21.54 ID:Vkpp8Cst.net]
>>533
succの逆はpredな
デクリメントではない

592 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 13:39:14.00 ID:zKKPdOe3.net]
****sucking の逆教えてや

593 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 16:44:16.35 ID:ectnCudZ.net]
>>585
****vomit

594 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 01:36:41.46 ID:i0C/srSl.net]
ちょっ違うなVomit****だ

595 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 09:27:04.54 ID:s8SCebgh.net]
-rw------- 1 root root 13796 5月 25 23:39 /usr/share/man/man1/cabal.1.gz
ArchLinuxでcabalのmanが読めないのはなんかのいぢめですか?

596 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:11:13.15 ID:wvAEkP6f.net]
リストのn番目の要素をaからbに変えたリストを返す関数とかないですかね?
splitAtで分けてから加工してまた繋げればいいのかな

597 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:22:58.81 ID:Ga0OokE+.net]
>>589
ilist というライブラリに Data.List.Index.setAt :: Int -> a -> [a] -> [a] という
質問そのものの関数があるよ。

598 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:35:00.08 ID:Rx3nBVE8.net]
一目、効率悪そう

599 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 22:10:57.08 ID:3aZpEfHH.net]
元のリストを破壊することなく新しいリストを作るからね
不特定多数から参照されるデータは破壊できないから効率が悪い

所有権がないと参照できないような仕組みがあれば良いのか

600 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 22:31:00.36 ID:A2iCvXLz.net]
>>589
nとaと(x:xs)受け取ってnが0になったらxの代わりにaをcons(:)すればいい。

setAt _ _ [] = []
setAt 0 a (_:xs) = a:xs
setAt n a (x;cs) = x:setAt (n - 1) a xs



601 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 23:05:39.10 ID:Ga0OokE+.net]
>>593
それ、質問者の言う splitAt で分けてからっていう方法と同じ

602 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 23:14:43.47 ID:wvAEkP6f.net]
>>590
>>593

ありがとうございます
Data.IndexのsetAt関数の定義をそのまま使わせてもらおうと思います

603 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 23:23:12.14 ID:Rx3nBVE8.net]
リストのコピーって、(既にある)リストの各要素の格納先と同じアドレスを指すポインタを新規アロケートしてく感じですか?

それとも一々要素までをもコピーするんですか?

604 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 00:33:15.43 ID:21264BYs.net]
コピーしてたらリストの意味無いからアドレスを新しく指してるんだと思う。
でないと、ソートとかメモリ幾らあっても足りなくなる。

605 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 00:49:02.28 ID:21264BYs.net]
>>594
SplitAtで分けると前方がリストになる。
(++)と(:)じゃ(:)のが効率が良い。
(++)は前方のリストが長くなると著しく遅くなる性質がある。

606 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 01:12:03.29 ID:21264BYs.net]
>>594
ちなみにsplitAtのやり方だとtake n zsの一番最後が更新したい場所になるので、initした上で++[a]++ysする必要がある。

setAt n a zs = init xs ++ [a] ++ ys
.........................where (xs, ys) = splitAt zs

Haskellでswap関数を作る7つの方法とか言うページ思い出したわ。。。

607 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 01:13:40.94 ID:21264BYs.net]
x splitAt zs
o splitAt n zs

608 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 06:42:46.07 ID:0mYha2aU.net]
(++) (x:xs) ys = x : (++) xs ys
setAt n a (x:xs) = x : setAt (n-1) a xs

これを比較して前者が著しく遅いというのは嘘八百だな

609 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 06:59:53.71 ID:Ny51uA9N.net]
>>601
reverse関数をfoldl (\x -> x:ls) [] xsで書くのとreverse xs ++ [x]で作るのじゃ反転した文字列が生成される度に右から結合されて凄く遅い。

上の>>599も、init xs ++ [a]で一旦結合して、++ ysの部分に来たらまたinit xs部分から結合が始まる。

610 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 07:04:59.77 ID:Ny51uA9N.net]
あ、逆か。
ysから始まってリストの先頭まで結合する。

出力する際には結局先頭から(:)伝いに辿って行くのでそう言う二度手間は避けた方がいい。



611 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 07:20:56.98 ID:Ny51uA9N.net]
ここで言う問題は、++ysそのものに害は無いけど、init xs ++ [a]で一旦先頭まで結合する処理が挟まってるってことね。

612 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 07:35:03.41 ID:0mYha2aU.net]
実は++も右結合なんだよな
だから init xs ++ [a] ++ ys を (init xs ++ [a]) ++ ys と解釈するのは絶対ダメ

613 名前:デフォルトの名無しさん [2017/05/29(月) 07:35:56.11 ID:Dokhp7Id.net]
setAt i x xs = let (ys,_:zs) = splitAt (i-1) xs in ys ++ x : xs
別にこういう定義にすればいい
でこれが遅いのは単にysの部分が2パスになるから

614 名前:デフォルトの名無しさん [2017/05/29(月) 07:39:00.53 ID:Dokhp7Id.net]
>>606
ミス
x : xsじゃなくてx : zs

615 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 07:52:38.57 ID:KKAtyjp+.net]
別にそれでも良い。
(++)は取り扱い次第で遅くなるってだけ。

616 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 15:03:33.95 ID:2+2L65e+.net]
というわけで、Sequenceです

617 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 20:13:36.52 ID:0mYha2aU.net]
showで文字列を作るのは平気なのにリストを作ると遅い遅いと言われる現象
数学的というより人間工学っぽい

618 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 20:46:32.77 ID:VknhjnwZ.net]
出現頻度の問題では?

619 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 21:27:07.82 ID:0mYha2aU.net]
リストを使う頻度はIOを使う頻度と関係ありそう
IOを使う頻度は個人差が非常に大きい

620 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 21:54:24.18 ID:2+2L65e+.net]
初心者はモナド変換で躓く



621 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 04:05:18.67 ID:jc1LxPHe.net]
例外処理のベストプラクティスがよく分からないなー
catchとかhandleでメイン処理、例外処理共に複数行になる時に、命令型のtry~catchみたいに無名関数での書き方ってどうなるんだろう
関数に切り出して呼ぶべし、なんかな?
どっちかだけ複数行ならそっちをdoにしたら良いっていうのは分るんだけど

622 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 05:14:25.23 ID:jc1LxPHe.net]
パーレンで囲んだラムダは複数行いけるのな、見た目微妙だけど

623 名前:デフォルトの名無しさん [2017/05/31(水) 03:43:11.48 ID:ML3xxqnu.net]
パーレン ()
ブラケット []
ブレース {}

624 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 16:54:41.37 ID:c6fwatRb.net]
f g n = gをn回合成した関数
みたいな関数のが欲しい

625 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 17:14:18.00 ID:PKJ3i7am.net]
f = (!! n) . (iterate g)

626 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 18:46:29.60 ID:RovdiJA/.net]
>>618
それって真面目なコードで使っていいのか?
融合変換で実質ループなのは知ってるけど
そもそもこのレベルを勝手に抽象化していいものかどうか

627 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 20:14:20.72 ID:lhcAcbkl.net]
なんの問題もないと思うけど

そもそも同じ関数の反復適用が iterate なんだから
たいして抽象的でもない

628 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 20:24:38.74 ID:lhcAcbkl.net]
iterative f n = foldl1 (.) $ take n $ repeat f


これより >>618 の方がわかりやすいと思う

629 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 20:28:35.64 ID:lhcAcbkl.net]
iterative f n = foldl' (.) id . map (const f) $ [1..n]

とかでもいいか。そして iterate の方があきらかにわかりやすい。

630 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 00:13:00.20 ID:zJIyEnOK.net]
Cabalプロジェクトをstackでビルドできないだろうか?
cabalをグローバルにインストールしたくないんだ



631 名前:デフォルトの名無しさん [2017/06/07(水) 04:45:18.83 ID:WOFnqCYP.net]
haskellで○×ゲーム作りました(頑張った私を褒めてください)
https://ideone.com/HHEWZv

632 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 08:42:17.54 ID:gpLNw8mo.net]
勝利判定なんとかならんのかw

633 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 10:28:15.63 ID:ZiMqMUeJ.net]
ゲームとかアルゴリズムとかどうでもよくて、ここが可愛いってのがポイントだろ?

('o':'o':'o': _ : _ : _ : _ : _ : _ :_) -> True
( _ : _ :'x': _ :'x': _ :'x': _ : _ :_) -> True

634 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 17:37:30.82 ID:goEom//K.net]
下は泣いてるミッフィーちゃんがクローン技術で失敗したような感じ

635 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 22:12:38.86 ID:FEgyIbtW.net]
昔オセロ作ったけど、勝敗判定作るの忘れて延々パスし続けたわ

main =
    void $ loop (player >=> ai) initBoard
        where loop :: (Board -> IO Board) -> Board -> IO Board
              loop f ib = loop f =<< f ib

636 名前:デフォルトの名無しさん mailto:sage [2017/06/08(木) 02:06:09.79 ID:3NnY77Pk.net]
>>624
同じゲームでも人によって設計や実装が全然違ってて面白いな

○×ゲーム - a-sanの日記 - haskell
https://haskell.g.hatena.ne.jp/a-san/20070115/p1

yasuabe blog: Haskell で三目並べ (2)
yasutech.blogspot.jp/2012/03/haskell.html

examples/TicTacToe.hs
projects.haskell.org/operational/examples/TicTacToe.hs.html

TicTacToe - HaskellWiki
https://wiki.haskell.org/TicTacToe

Tic-tac-toe in Haskell ・ GitHub
https://gist.github.com/billdozr/3071732

637 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 01:46:27.90 ID:vYdG9fRO.net]
開発環境としてleksahを入れてみたんですが、getLineのような標準入力が上手く動いてない気がします
実行しても入力出来るようにならず止まってしまうのですが、どうしたら入力出来るようになりますか?

638 名前: mailto:sage [2017/06/11(日) 05:15:07.62 ID:afWo9qoQ.net]
今気づいた! leksah ってHaskell逆読みじゃん!

639 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 12:39:02.23 ID:hZZQfw5d.net]
月並な命名をされた月並なアプリ

640 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 16:52:05.15 ID:3HVnXb8h.net]
>>68
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
> となるような関数fはどのように書けるでしょうか

めちゃ遅レスでなんだけど、f [x, y] = x : [y] ではだめなの?



641 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 17:45:34.43 ID:uxrAPwUF.net]
>>633
自分でちゃんとテストしてみた?

642 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 22:56:26.81 ID:3HVnXb8h.net]
>>634
リストの定義から明らかだと思うのでテストはしていない

643 名前:デフォルトの名無しさん [2017/06/11(日) 23:16:23.58 ID:0ffmynih.net]
>>635
リストの定義から明らかだが、>>69

644 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 23:46:34.97 ID:QTMXbNo3.net]
驚き最小=テスト最小の法則

645 名前:デフォルトの名無しさん mailto:sage [2017/06/11(日) 23:54:46.06 ID:3HVnXb8h.net]
>>636
何と何の型がどう合わない?

646 名前:デフォルトの名無しさん [2017/06/12(月) 00:18:12.16 ID:9+UoMkQw.net]
テンプレート?

647 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 01:00:35.16 ID:p/7lEol5.net]
fを適用した結果の型が外側のリストの型と合わないってことでら

648 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 01:38:16.98 ID:0O7XnA5J.net]
たぶんshowの結果を評価する途中でunsafePerformIOすればいいんだな

649 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 01:46:50.84 ID:4tiz7p+p.net]
[ “aa”, “bb”, [“cc”,”dd”] ]

の型がどうやって合うと思ったのだろうか。

650 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 02:20:04.97 ID:DHBWzfrJ.net]
邪悪なことはするな



651 名前:デフォルトの名無しさん [2017/06/12(月) 02:47:23.94 ID:q+c9m0UT.net]
>>638
文字列型の中に文字列のリスト受け取って文字列を返す関数型が混じってる。

652 名前:デフォルトの名無しさん mailto:sage [2017/06/12(月) 09:44:54.21 ID:4tNZZp5I.net]
>>644

それは違う。関数型が混じってるんじゃない。

>>642

["a", "b", ["c", "d"]]
= "a" : ("b" : ["c", "d"])
= "a" : ("b" : ("c" : "d"))
= ["a", "b", "c", "d"]

じゃないの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<290KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef