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


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

スレ立てるまでもない質問はここで 118匹目



1 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 22:33:46.84 ]
質問する前にGoogleで検索しましょう。www.google.co.jp

プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。

前スレ
スレ立てるまでもない質問はここで 117匹目
toro.2ch.net/test/read.cgi/tech/1328439334/

962 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:34:27.68 ]
馬鹿には無理

963 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 00:21:59.89 ]
だなw

964 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 01:27:41.07 ]
>>957
自分も関数型言語(主にHaskell)はアルゴリズムの勉強に最適だからお勧めしたいけど、広くは使われてないから、一度何らかの言語で挫折したらで良いと思う

よく使われてる言語を使いこなせてる人は、最初から、抽象的に考えて、それをどうコードに落とすかが分かってるんだと思う
関数型言語は、その抽象的な考えを、ほぼそのままコードに落とせるから、本当の意味で初心者向け

実際によく使われてる言語(手続き型やオブジェクト指向)でも、結局コードを良く見ると同じ事してるって分かるんだけど、if文やfor文でアルゴリズムをそのままではなく、変形させられてるので、アルゴリズムそのものはどう言う構造なのかが見えにくくなる
(この、見えにくい構造を手続き型やオブジェクト指向で、すでに見えてる人には関数型言語は勉強する必要有るのか?と言う疑問もある)


なにはともあれ、娘さんがJavaScriptをもうちょい頑張るといってるなら、JavaScriptで頑張らせれば良いと思う
何か、挫折しそうになった時に、一旦Haskellの勉強を通じて、挫折した処理がどう言う構造の処理なのか理解してもらって、またJavaScriptに戻れば良い


965 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 01:34:03.85 ]
もっともらしい事言ってるが嘘っぱち
アルゴリズムの本に載ってる疑似コードは必ず手続き型風だから
それで理解すればいいし、むしろ関数型でアルゴリズムを理解する情報は非常に少ないし
そもそもコーティングの段階において理解しやすくない

966 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 01:39:47.95 ]
変則的な最近の言語をよりも、昔からある C で学べばいいよ。
そうすれば他の言語の長所短所が分かりやすい

967 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 02:11:27.06 ]
Cはメモリ、ポインタ管理を自前でやるところが勉強でも実用でも最高の特徴だろう、データ構造も実装しやすい
後は高速なくらいで、他と比較すると少機能過ぎてストレスが溜まるだけ
今日日なんでも自前で作るプログラミングは時代遅れ

968 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 09:32:21.74 ]
>>965 はもっともらしい事言ってるが嘘っぱち。
Knuthが疑似コードを手続き型の権化である機械語(MIXとかMMIXという
そのために設計した仮想機械)で説明しているが、とても理解できたもんじゃないから。

初歩的なアルゴリズムの理解なら、再帰が自然に書ける関数型のほうが良い。情報も多いし。

ロックフリーとかそういう高度な技法になってくると、手続き型が必要になってくるけど、
必要になったら勉強すれば良い。

969 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 09:43:49.68 ]
手続き型のほうが人間向き。
手続き型だけど関数型のような書き方も使える言語が優れてる。

970 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 09:43:55.84 ]
>>965
コードが書かれていようがいまいが、関数型言語には問題ありません
どう言う処理をするかが書かれていれば、そのままコードにできますから

実際、私がマージソートを理解したのは、「アルゴリズム」のキホン (イチバンやさしい理工系シリーズ) と言う、手続き的な手順(コードは一切でない)と処理の様子を図で書かれているだけの本を読んで、
Haskellでマージソートを書けましたし

コードが載ってても、コードが何をやってるのか分からず、丸写しとかしてたら、意味がありません
繰り返しますが、最初から現在主流の言語で、コードを自分で書けるだけの抽象的な考え方が出来てる人には必ずしも必要な言語ではないです
そう言う、コード付きのアルゴリズム本を読んでも理解できなかったら、一旦Haskell覚えて再チャレンジをお勧めします


関数型言語の方が本当の意味で初心者向けの言語では有っても、現在主流の言語(手続き型言語)は何かしら必ず覚えないといけない物ですし
主流の言語だけでプログラミング能力が伸びるなら、それに越したことは無いです



971 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 09:52:39.59 ]
純粋関数型

Haskell - Wikipedia

Haskellは非正格な評価を特徴とする純粋関数型プログラミング言語である。
批判
Haskellは他のプログラミング言語には見られない多くの先進的機能を持っているが、
これらの機能のいくつかは言語を複雑にしすぎており、理解が困難であると批判されてきた。
Haskellの潔癖さとその理論中心の起源に起因する不満がある。


972 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 10:20:37.82 ]
JavaScript Programming
クラスのないオブジェクト指向
オブジェクト指向にはいろいろな考え方があり、クラスが存在しないオブジェクト指向言語もあります。
これを「プロトタイプベース」といいます。代表的な言語として Self や JavaScript があります。
プロトタイプベースのオブジェクト指向機能はとてもシンプルです。
たとえば JavaScript のオブジェクトは単なるハッシュにすぎず、オブジェクトに関数を格納すればそれがメソッドになります。
JavaScript は関数をオブジェクトとして扱うことができるので、関数型言語のように関数を変数に格納したり、引数として関数を渡すこともできます。
JavaScript はクロージャのような関数型言語の機能とプロトタイプベースのオブジェクト指向機能を備えていて、
これらを組み合わせることで柔軟で高度なプログラミングが可能になっています。
JavaScript はたんなるマクロ言語ではなく、まっとうなプログラミング言語だったのです。
www.geocities.jp/m_hiroi/light/js01.html

高階関数
JavaScript はプロトタイプベースのオブジェクト指向言語ですが、関数型言語の機能も備えています。
JavaScript は関数をオブジェクトとして扱うことができるので、関数を変数に代入したり、引数として渡すことができます。
また、値として関数を返すこともできるので、関数を作る関数を定義することも簡単にできます。
関数を引数として受け取る関数を「汎関数 (functional) 」とか「高階関数 (higher order function) 」と呼びます。
JavaScript は高階関数を簡単に定義することができます。
今回はよく使われる高階関数として、マッピング、フィルター、畳み込み (縮約) について説明します。
www.geocities.jp/m_hiroi/light/js03.html

973 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 11:22:11.97 ]
>>969
同意。多少トリッキーにはなるが便利
決して初心者向けではないが、無理なら全部手続き型みたいに書くことも可能だしな

974 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 12:19:14.70 ]
Prologだって全部手続き型風に書くことはできる。旧き良き時代のモジュラープログラミングの極意として。

975 名前:Prolog工作員 mailto:sage [2012/05/15(火) 12:27:01.16 ]
>>974
集約は再帰なしでは書けないよ。再帰と手続き型は矛盾しないのかも知れないけど


976 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 12:35:55.44 ]
>>967
実践はともかく、プログラミングの学習においては、基本的な関数を自作するのは重要だと思う

それはともかく、Haskellと比較用にRubyでlength関数作ろうとしたら配列はeachメソッドで各要素にアクセスできるが、文字列はeachは行単位で、文字単位にはeach_charを使わないといけないのが分かったんだが、それだと配列と文字列で別々にlength関数作らんといかんの?
ダックタイピング出来るのがLLの利点じゃなかったのかと言いたい
(しかも、1.9からは文字列のeachも廃止になるのでeachの構文糖衣であるfor文が文字列で使えない)

以下のコードは配列だと正しい結果を返すが、文字列だと1.8系だと正しくない結果を返し、1.9系だとエラーになる(eachメソッドが無いぞゴラァ!と怒られる)

def mylength (str)
sum = 0
for i in str
sum += 1
end
return sum
end

Ruby詳しくないとは言え、この動作がおかしいのだけは理解できる


977 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 13:29:26.25 ]
どこもおかしくないが。

978 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 13:46:31.08 ]
>>977
仕様通りと言う意味ではおかしく無いんだろうが、pythonでもCでもhaskellでもjavaやC#でも、文字列に対するfor文の動作は一文字ずつアクセスする事だ

そもそも文字列にfor文が使用出来ない仕様って時点でおかしい

979 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 14:03:21.93 ]
>>978
20年くらいCは使っていないので質問させていただきますが、最近のCでは文字列に
対して、特別な動作をするforが存在するのですか?

980 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 14:06:47.26 ]
そもそもC言語に文字列型なんてないからな。charの配列はあるが。



981 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 14:28:26.83 ]
>>979
無いよ
ただ文字列(CとHaskellでは文字の配列だったりリストだったりするだけ)を各要素ごとにアクセスする=一文字ずつアクセスするって考え方はRubyを除いてどの言語も同じってだけ

Ruby1.8だと>>976のコードに"Hello\nWorld!!"を与えると2が返る
Ruby1.9だとエラーになる

他の言語だと、ちゃんと13が返る

C言語版
int my_strlen(char str[])
{
int i = 0;
for( i = 0; str[i] != '\0'; i++ )
;
return i;
}

python版
def mylength (str):
sum = 0
for i in str:
sum += 1
return sum

haskell版
mylength [] = 0
mylength (x:xs) = 1 + mylength xs




982 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 14:47:36.52 ]
size使えバカ

983 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 14:50:16.21 ]
>>978
BASICも文字単位のアクセスや長さの取得に関数を必須とするが…
文字列を文字の集合と考える言語か否か、の差じゃね?
Rubyはそう考えず、文字列とはテキストであると考えて来たから
テキストに対するeachは行単位だったのだろう

984 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 14:53:04.71 ]
ダックタイピングができると、なんでString#eachがcharAt()的な動作をしないといけないのかがわからん

985 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:18:39.49 ]
アルゴのコードが見える人がなんでHaskell覚えんにゃならんの?

986 名前:979 mailto:sage [2012/05/15(火) 15:33:57.31 ]
>>981
そのC言語版 forと関係ないのではないかな。

987 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:38:38.95 ]
>>976
言語仕様や使用用途や設計目的(ゴール)は、HaskellとRubyで比較で出来るほど似てるんですか?

988 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:47:47.20 ]
>>983-984

個人的にはeach_lineがあるのだから、eachがforの構文糖衣と言う事を考えると、やはりeach_charの別名としてeachは定義する方が自然だと思う

なにより問題はforがeachの構文糖衣であるが故に、文字列のeachが1.9で廃止になったせいでforが文字列で使えなくなった事
文字列のeach廃止にするなら、その辺考えとけよ。と

Ruby(まともに動かなかった)のコードをPythonでほとんどそのまんま書いたら、普通に動いてるし・・・
(というか、文字列を文字の集合と見る言語の方が上で具体的に言語名上げた通り、多数派だ)

Rubyで配列も文字列も統一的に扱える関数って、Pythonよりも作りにくいんじゃなかろうか



989 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:48:19.28 ]
>>985
逆、見えない人がHaskell覚えれば見えるようになる


990 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:53:35.08 ]
>>988
そもそもString#eachはString#each_charとは別物だし、「僕が考える自然」なんかどうでもいいし



991 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:56:30.67 ]
Haskellは言語仕様も機能も先進的で興味あるんすが、いかんせん日常的に使うところがないので覚えても使い道がくすぐ忘れてしまいます。
Ruby,Java,JSなど普通に使える人にとって、Haskellが有用な使い道は現在ではどういうのがあるのでしょうか?(あるならちょっと触ってみようと思います)

992 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 15:59:31.48 ]
文法はどうでもいい。
Haskellでさえ、元はC/C++のソースなんだろ。
C/C++が出来ればゼロからHaskellが作れる。
速度を気にしなければ逆も成り立つが。

993 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:00:10.14 ]
>>987
どっちも汎用言語なので、まあ、同じゴールは目指してるといえる
今回の件で、少なくとも、Rubyは学習用途じゃ向かないのは分かった


994 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:02:03.63 ]
>>991
その言語を愛して、すべての事に使ってみる以外に、ないのではないかな。
どの言語でも同じでしょう。

995 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:04:29.23 ]
キラーアプリがないから使うタイミングなんて無い
普段使いなら単純に好き嫌いの問題であり
最近のLLは関数型的にも書けるから、殊更に純粋な関数型を好むのはちょっと変わった人間が多い
あるいは変わった人間になりたい中二病が好む

996 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:05:38.58 ]
>>988
Rubyじゃなくてそも元になったPerlに言えよ…
Perlの文字列は配列ではないぞ

997 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:05:52.99 ]
楽して生産性が高かったら良い。
C/C++やC#やPHPやPerlあたりは装備が色々とあって、
どれだけ文法に優れていようとも生産性で抜く事は難しいだろ。


998 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:06:16.01 ]
>>993
つまり文字列を文字の集合として扱わないBASICは、教育用途に向かないと?

999 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:09:09.29 ]
次スレ建てろよ

1000 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 16:17:45.77 ]
>>993
汎用言語なら汎用性高いはずですが、Haskellは何に向いてるんですか?



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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