5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2013/03/23(土) 12:34:19.09
haskell.org
ttp://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/
Part21 ttp://toro.2ch.net/test/read.cgi/tech/1358702176/

680 :デフォルトの名無しさん:2013/06/30(日) 15:42:44.49
自分で自分を召還したんですか?

681 :デフォルトの名無しさん:2013/06/30(日) 15:47:20.05
あとAransk

682 :デフォルトの名無しさん:2013/06/30(日) 16:21:33.89
random-1.0.1.1 パッケージの System.Random モジュール内の関数に関して質問です。

左閉半開区間 [0, 1) のランダムな浮動小数点のリストを確実に得るには、
random 関数を使って自分でリストを作るしかないでしょうか。

randomR 関数は直接リストを得られますが、閉区間 [lo, hi] なんですよね。
しかも、次の説明も何やら怪しいですし。

For continuous types there is no requirement that the values
lo and hi are ever produced, but they may be, depending on
the implementation and the interval.

しかし、randomR の実装を見てみると、結局 random 関数を使っています。
正確には、random 関数の戻り値の乱数の方を v とすると、
2.0 * (0.5 * lo + v * (0.5 * hi - 0.5 * lo)) です。
random 関数が左閉半開区間なので、randomR も左閉半開区間になりますよね。
(もちろん、浮動小数点の場合の話です)

説明と違うような気がしますが、この違いを説明したのが上記の英文の部分でしょうか。

683 :デフォルトの名無しさん:2013/06/30(日) 16:29:09.55
randomsは?

684 :デフォルトの名無しさん:2013/06/30(日) 16:47:23.96
>>683
あぁそうか、randoms 関数を使えばいいのか。
馬鹿だったわ、ありがと。

でもそれとは別に、randomR 関数の説明って、
なんであんな変な条件みたいなのがあるんだろ。

685 :デフォルトの名無しさん:2013/06/30(日) 16:57:00.42
連続だと閉区間でも上限下限は絶対に出力しないというのは一種の制約だから。
[lo, hi]なのに(lo, hi)と同じ実装を許容するなら但し書きを書くのが適切。

686 :デフォルトの名無しさん:2013/06/30(日) 18:01:43.49
>>685
でも、>>682 の作り方なら下限は出力されるんじゃない?

「絶対」ではなく「実装依存」ってこと?

687 :デフォルトの名無しさん:2013/06/30(日) 21:38:38.36
>>684
足下は初めは平身低頭に知恵を乞いておきながら、用が済めば急にタメ口になるとは何としたことか

688 :デフォルトの名無しさん:2013/06/30(日) 21:55:55.54
死ぬほどどうでもいい

689 :デフォルトの名無しさん:2013/06/30(日) 22:16:19.65
>>687
ホントごめん。

初めは質問者専用の口調で書いたのだけど、2回目の時にそれを忘れてて、
3回目で、なんかもういいや、ってなってしまった。

690 :デフォルトの名無しさん:2013/06/30(日) 22:44:07.97
かまへん、かまへん

691 :デフォルトの名無しさん:2013/06/30(日) 23:11:37.34
書いてる途中で自分の口調が分からなくなるのはたまにある
まあ自分はやらかしたことないけど(梯子外し)

692 :デフォルトの名無しさん:2013/07/01(月) NY:AN:NY.AN
せやな

693 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN
wikipediaとは違うwikibooksに項目があった
ttp://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
あと英文のmonadの項目誰か訳してくれい(泣

694 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN
人に頼ってないで英語の勉強を始めろ!

695 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
英語が俺の勉強をすべき

696 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
>>695
勉強したが、こいつは無理って諦められたんだよ

697 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
>>695
思考の柵が吹き飛んだ

698 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
>>693
まってろよ、今大熊さんの本を読んでるところなんだ

699 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
Lispがある程度わかってる人(SICP半分ぐらいまで読んだ)向けの
Haskell入門書ってないでしょうか

700 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
シクプってなに?そんなに凄いの?
読んでないとモグリなの?

701 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
>>700
読み終わるころにはlisp処理系の自作ができる

702 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
>>699
結論から言えば、Lisp が分かる人をターゲットにした Haskell の入門書はありません。

Haskell を学ぶに当たって、Lisp が分かっている事そのものはたいして役に立たちません。
強いて言えば、Lisp で参照透過性を意識したプログラミングに慣れていれば、
Haskell のその部分で躓くことはないだろうという程度です。
なので、そのような入門書を出版する動機がないのでしょう。

しかし、Haskell の Haskell らしさが出る部分はそれだけではありません。
どのような入門書にも、参照透過性を含め他の Haskell らしさの部分は解説してあります。


ちなみに、SICP で学んだ事は他のどのような言語でプログラムする際にも活きます。

703 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
過去スレにこんなのがあった。
http://ja.wikibooks.org/wiki/48時間でSchemeを書こう

> このチュートリアルの対象読者は主に以下の2種類です。

LispかSchemeを知っていて、Haskellを学びたい人
プログラミング言語を何も知らないけれども、一定の背景知識を持っていてコンピュータに詳しい人

704 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
>>703
それを入門書の代わりに使うのなら、
素直に普通の入門書を読んだ方が良いような気がするなぁ

まぁターゲットとしては >>699 にドンピシャだけど

705 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
lispもCも経由せずに、はじめてのコンピュータ言語でいきなりhaskellを教えるカリキュラムがあってもいいはず

706 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
IFPHは学部初年度向けと書いてあるしプログラミングの事前知識も必要なかったはず

707 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
皆んなHaskellを何に使ってる?
俺は趣味で、ゲートICの立体構造をアルゴリズムと見なして、どんな構造なら性能を上げられそうかのシミュレーションに使ってるけど。

708 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
はあ、そうですか

709 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
事務処理のスクリプト最強

710 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
クイックソート

711 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN
世界平和のために使ってる

712 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>710
それは本物のクイックソートか?

713 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>712
1) クイックソートって、列から適当な要素を選択して、
2) それよりも小さい要素を集めた列と、大きい要素を集めた列を作り、
3) 作られた2つの列に対して 1)、2) を施し、列を連結する、ものだよね。

このアルゴリズムの骨組みを守りつつ、
平均・最良の計算量が O(n log n) で、最悪が O(n^2) になっていれば、
どれほど馬鹿な実装方法を使おうが、どれほど処理に時間かかろうが、
どれもみんなクイックソートを名乗っていいと思う。

Haskell の稚拙なクイックソートの例は入門サイトや入門書にはたいてい載ってるし、
どんなバカでも理解できるだろうし実装できる。

だから >>710 のは、いくら何でも偽物ってことはないだろ。
というか Haskell の偽物のクイックソートの例を見てみたい。


と思ったのだが、どうだろう?

714 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
至高のクイックソートを用意しました

715 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
このクイックソートを実装したのは誰だあっ!

716 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
俺のクイックソートは一味違うぜ

717 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
でもHaskellも悪いんですよ

718 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
実はHaskellとクイックソートって相性悪いよね

719 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
Haskellerは
zipperの説明を読むだけでエクスタシーに達します

720 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
なんで大元の論文を引きもしないんだろうか

721 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
面倒だから

722 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
都合の悪いものはモナドにしてネイティブで実装すればよい

723 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
わずか2ページってクイックソートの論文だったっけ?

724 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>713
>>712じゃないけど、Haskellのよくあるクイックソートは、
空間計算量が最悪O(n^2)になるという点で普通のクイックソートと違って怪しい

725 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>724
量子コンピュータが実現した世界で何言ってんだ?

726 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
またHaskellのクイックソートが偽物とか言う奴が現れたか…

twitterでも今年に入ってからこの話題で盛り上がったようだ
まとめのタイトルが笑える
http://togetter.com/li/445854

727 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>724
怪しいというのが曖昧でよく分からないのですが、
「空間計算量が最悪でもO(nlogn)である」というのは、
クイックソートである事の必要条件なのでしょうか。

728 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>727
俺にも分からん

729 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
名前のとおり速けりゃいいんだよ

730 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
そうやってフザケる話の流れではないような気がする

731 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
とりあえず、よくあるもっとも簡単な実装はこれかな。

qs :: (Ord a) => [a] -> [a]
qs [] = []
qs (x:xs) = qs (filter (< x) xs) ++ [x] ++ qs (filter (> x) xs)

空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?

732 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>713で正しいよ

なんかwikipediaのクイックソートのページにも実用性が云々と書かれているけど、そもそもリストという
データ構造自体がソートと相性が悪いんだから、そんなこと言っても仕方ないと思うけどね

大量のデータを扱うなら他のデータ構造を使うべきだし、ごく少量のデータなら入門書の実装の
方がむしろ実用的だろう

>>731
それだと重複した要素が消えることないかな?

733 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
なんかの入門書でHaskellにはクイックソートよりよいソートがあるって書いたあったんだけど何ソート?

734 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>733
データモデルとデータの追加でよいソートは異なる

735 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>731
>空間計算量が最悪O(n^2)になるケースってのは、どういうリストに適用した時?
入力が既に正順か逆順にソートされている場合。O(n^2)になるのは正順か逆順のどちらか
だけなんだけど忘れた。この板のHaskell関係の過去スレの一つに議論があったはず
(ちょっと探したけど見つからなかった、曖昧でごめん)

736 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
見つけた。Part 7の881から

737 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>715
コーディングの合間に喫煙していたと何故判ったのですか!?

738 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
Cで作ってHaskellから呼び出すだけのライブラリ

Haskellで一から作ったライブラリ

どっちが幸せになれるの

739 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
*Main> :type (+) (-)
(+) (-)
:: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a

これを解説してください。(+) を数ではない (-) に適用できる?

740 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>715で笑ってしまった
恥ずかしい

741 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>739
ヒント:カリー

742 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
f :: Num (a -> a -> a) => (a -> a -> a)
x :: Num a => a
y :: Num a => a
(+)(-) f x yのかたちで呼び出すんだろうけど
Num (a -> a -> a)が意味不明すぎる
自然数をラムダ関数で表現するやつかな

743 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
型クラスNumのインスタンスとして
Numとして解釈できるラムダ関数を定義すれば良いんだよな
えーとどんなだっけ

744 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
(゚д゚)

745 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>739
(-)はデフォルトでは「数」じゃないけど、インスタンスを定義すれば数になる
たとえばNumInstancesパッケージのData.NumInstances.Function
http://hackage.haskell.org/packages/archive/NumInstances/1.3/doc/html/src/Data-NumInstances-Function.html
をインポートすると、
instance (Num b) => Num (a -> b)
が定義されるので、例えば(Int -> Int -> Int)を加減乗除できるようになる

746 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>732
すまんすまん、= を書き忘れてた。
< か > のどちらかに = を追加して考えて。

>>735 >>736
モリタポ使っても、なぜか Part 7 が見れない。

>>731 のような感じのクイックソートの実装だと、
A ++ B ++ C という形の式が大枠であるよね。

これを順に弱頭部正規形にして評価していくとき、最悪の場合、
左側の ++ 演算子が評価可能になるまで(++の左辺が x:xs の形になるまで)ずっと、
(((・・・((A'' ++ B '' ++ C'') ++ B' ++ C'))・・・))) ++ B ++ C
というような再帰的な形で左側が伸びていくと思う。

未評価の A'' や B' などが何個作られるかというと、
qs 関数が適用するリストの長さを n とすると、ざっと見積もって
3 + 2 * (n - 1) 個かな。
(最初の 3 は一番深い所の A++B++C で、2 は ()++B++C の B と C)

最悪ここまで式が伸びきるので、空間計算量は O(n) ではないか、
と俺は思ったんだが、どこで勘違いをしているのか分からない。

過去ログ Part 7 が見られるようになったら調べてみるけど、
今の所自分の頭ではこう考えた。

747 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>739

> (+) を数ではない (-) に適用できる?
できない。

*Main> :type (+) (-)
(+) (-) :: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a

これが言っているのは、ざっくりいえば「もし、(-)が数であれば、(-)に(+)を適用できますよ」ということ。

まず、プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるようにしてあげなければならない。
首尾よくそれが実現できたら、晴れて(+)を(-)に適用できる。

748 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>747 >>745
ありがとうございます。
> プログラマが何らかの方法で(-)を数(Numのインスタンスの値)になるように
これが実際できてしまう、というのが、Data.NumInstances なのか。

749 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
Haskellはすごいのでがんばれば何でもできる
Wikipediaのラムダ計算の自然数と算術の項目に
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97#.E8.87.AA.E7.84.B6.E6.95.B0.E3.81.A8.E7.AE.97.E8.A1.93

0 := \f->\x->x
1 := \f->\x->f x
2 := \f->\x->f (f x)
3 := \f->\x->f (f (f x))
(+) = \m->\n->\f->\x-> m (f (n f x))

としてラムダ関数で自然数の計算をシミュレートする方法が載ってる

750 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>749
それだと自然数の型が(forall a. (a -> a) -> a)みたいになって、
>>739で要求されてる(a -> a -> a)とは別物

751 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
ごめん、forall a. a -> (a -> a) -> aね

752 :デフォルトの名無しさん:2013/07/07(日) NY:AN:NY.AN
>>749
(+) が間違ってるな。
(+) := \m->\n->\f->\x-> m f (n f x)

753 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN ID:t6uYFe0B!
haskellが他の言語と違うのはside effect freeだから!
と本に書いてあるのですが、他の言語でも出来そうな気がするのですが?
nibai :: Int ->Int
nibai n = 2*n

void nibai(int n){
value = 2*n;}

754 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
ホントだ!すごい!

755 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
>>753
「haskellが他の言語と違うのはside effect freeだから!」
と書かれていた本のタイトル名を教えてください。

756 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
整数を受けとり二倍して何も返さずシカトする
そんな関数に私もなりたい

757 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
いやな奴だな

758 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
副作用はツンデレ

759 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
参照透過性は甘え

760 :デフォルトの名無しさん:2013/07/08(月) NY:AN:NY.AN
>>753
ああ、全ての行が見てるとムズムズする

761 :デフォルトの名無しさん:2013/07/09(火) NY:AN:NY.AN
ヤンデレと病んでるは似ている。

762 :デフォルトの名無しさん:2013/07/09(火) NY:AN:NY.AN ID:7EcXvLZJ!
質問です。
Not in scope: `GLFW.defaultDisplayOptions'
Not in scope: `GLFW.setWindowPosition'
とエラーが出ました。
参照しているttp://www.youtube.com/watch?v=LIlBvBT6dIcでは使えていますが何がいけないのでしょうか?
import qualified Graphics.UI.GLFW as GLFW
import Graphics.Rendering.OpenGL.Raw

main = do
GLFW.initialize
GLFW.openWindow
GLFW.defaultDisplayOptions
GLFW.setWindowPosition $ 110
clear Colour{red = 0, green = 0, blue = 1, alpha = 0.1}
GLFW.swapBuffers
GLFW.sleep 5
data Colour = Colour {red, green, blue, alpha :: GLclampf}

clear :: Colour -> IO()
clear (Colour(red, green, blue, alpha)) = do
glClearColor red green blue alpha
(glClear . fromIntegral) gl_COLOR_BUFFER_BIT

763 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
javaでもside effect free できるってhttp://masuda220.jugem.jp/?eid=335
に書いてあったけどクラスの価値をほとんど捨ててる設計じゃん。

764 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
手続き型の本質は副作用にあり

765 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
     //
    / /パカ
    / /
   / /ハ,,ハ
   / ヽ(=゚ω゚)ノ__ぉはぃょぅ
  // (  x ) /
  " ̄ ̄ ̄ ̄

766 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
>>762
パッケージが違う
動画で使ってるのはGLFWでなくてGLFW-bの方

767 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
>>762
GLFW-b パッケージにはその関数はあるけど、GLFW パッケージにはないよ。

768 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN ID:cVdIS5P/!
ありがとうございます。GLFW-bですか。
どうやって使うのか調べてきます。
けど、動画を見る限りじゃGLFW-bが見当たらないのですが。

769 :デフォルトの名無しさん:2013/07/11(木) NY:AN:NY.AN
>>733
マージ

770 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN
>>769
それマージで言ったん?ソートすんならすぐ出せ
マージなら2ちゃんねらソート力を挙げて列べるが

771 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN ID:Hq+EmFHl!
原始再帰関数(primitive recursion)とは一体なんなのでしょうか?
ttp://stackoverflow.com/questions/1712237/how-does-primitive-recursion-differ-from-normal-recursionの回答に、
「原始再帰関数とは他の原始再帰関数で定義されいて自然数の構造の再帰である。」とありますが、
イマイチ分かりません。
例えば、自然数を使った
fac::Int->Int
fac x
| x > 0 = x*fac(x-1)
|x==0 = 1
は原始再帰関数で、
inverse::String->String
inverse value = case (value) of
[]->[]
(x:xs)-> inverse xs ++ [x]
は原始再帰関数では無い。
ということでしょうか?
base caseにヒットして関数が終了するのであればそうなのかな〜と思っていたのですが。

772 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN
>>771
その関数の性質を帰納法で証明できる関数だと理解していたが、違うだろうか

773 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN
ゲーデル数化すればinverseも自然数上の原始帰納関数にできる。
もちろん文字列上の原始帰納関数ということで問題ないが。

774 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN
チューリングマシンの意味で計算可能な関数は原始帰納関数で表現できる

775 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN
いや出来ない。
チューリング機械計算可能関数には一般帰納関数も含まれるから。

776 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN ID:Hq+EmFHl!
あっ、帰納法でか?

ん?では普通の帰納関数とはなんでしょうか?
上の方に一般帰納関数というのがありますが。

777 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN
その辺はwikipediaで調べてからまた質問して。
Haskellの話題じゃないし。

778 :デフォルトの名無しさん:2013/07/13(土) NY:AN:NY.AN ID:Hq+EmFHl!
>>777
確かにスレチだ。すみませんでした。

779 :デフォルトの名無しさん:2013/07/14(日) NY:AN:NY.AN
今ホットなライブラリは?

780 :デフォルトの名無しさん:2013/07/14(日) NY:AN:NY.AN
C や Java、OCaml や Lisp などではこんな質問はまず無いのに、
なんで Haskell だと「今一番熱い漫画は?」みたいなノリで頻繁に投げかけられるんだろ。

Haskell の最新事情を追いたかったら、こんな所で質問するより、
メーリングリストにでも登録して議論してた方が何倍も良いと思う。

225 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)