小6におすすめな言語 (540レス)
小6におすすめな言語 http://mevius.5ch.net/test/read.cgi/tech/1598336253/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
99: デフォルトの名無しさん [] 2020/10/25(日) 09:55:39.29 ID:7UCeAjtw Haskellだと普通の言語より関数化やマルチスレッドプログラミング教え易い。 リストや配列から値を求める->foldl関数 リストや配列から新しいリストや配列を作る->map関数 そのfoldlやmapも自作出来る。 普通の言語では「良く使う機能は関数にまとめましょう」と言いながら良く使うforのパターンを関数にしない。 関数型言語の機能を取り込んで、ライブラリにmapやfold、あるいはcollect、reduceが備わってから使い出した。 文化的に「良く使う機能は関数にまとめましょう」を実践させるのに関数型言語の方が向いてる。 http://mevius.5ch.net/test/read.cgi/tech/1598336253/99
100: デフォルトの名無しさん [] 2020/10/25(日) 09:55:47.63 ID:7UCeAjtw マルチスレッドプログラミングも、身近な所だと四則演算が混じった計算でも、同時に出来るところは同時に計算しても良い。 例として、()で括った箇所は同時に計算して良い。 2 * 3 + 4 / 2 = (2 * 3) + (4 / 2) = 6 + 2 = 8 普通の言語だと、プログラマーがスレッドを作って並列処理させるし、デッドロックを気にしないといけないけど、 関数型言語はここをマルチスレッドでと指定すれば後は言語側がやってくれる。 (普通の言語だと、上の例ですらデッドロックや処理待ちを気にしないといけない) 上の例をマルチスレッドにするとむしろ遅くなるが、クイックソートの分割統治法とかで威力を発揮する。 import Control.Parallel.Strategies main = print (a + b) where (a,b) = (2 * 3, 4 `div` 2) `using` evalTuple2 rpar rpar http://mevius.5ch.net/test/read.cgi/tech/1598336253/100
103: デフォルトの名無しさん [] 2020/10/25(日) 19:11:06.08 ID:7UCeAjtw >>101 うむ。 マルチスレッドまでは言い過ぎた。 でも、forで良く使うパターンを関数化しない or 出来ないのは普通の言語だと演算子が関数の一種として扱われてないから。 わざわざラムダ式や関数書かなきゃ行けないのはスマートじゃない。 高階関数取り入れても、まだまだ再利用性には関数型言語と差がある。 sum = foldl (+) 0 product = foldl (*) 1 reverse = foldl (\xs x -> x:xs) [] http://mevius.5ch.net/test/read.cgi/tech/1598336253/103
104: デフォルトの名無しさん [] 2020/10/25(日) 19:11:15.93 ID:7UCeAjtw >>102 ぶっちゃけその通り。 ただ、今の教育課程はいささか・・・いあ、大分不安がある。 例えば足し算の性質、合併と増加。 参考書では同時か後からかの違いと説明されるが、これではリンゴとみかんの合計の様な違うものの足し算の説明が出来ない。 ペアノの公理はリストと同型であるが、そう考えると合併はappend(リストの結合)だ。 一方の増加は足す数をカウンタとして足される数を増やすので、見ようによっては足す数の型を足される数の型に変換して合併する処理だ。 型にすると 合併の型: a -> a -> a 増加の型: a -> b -> a そうするとリンゴとみかんの合計は リンゴとみかん リンゴ みかん (0 + 3) + 5 リンゴとみかん みかん 3 + 5 リンゴとみかん 8 となる。 http://mevius.5ch.net/test/read.cgi/tech/1598336253/104
106: デフォルトの名無しさん [] 2020/10/25(日) 19:31:04.14 ID:7UCeAjtw 合併のHaskell(リスト)の例 [] ++ ys = ys (x:xs) ++ ys = xs ++ (x:ys) [1,1,1] ++ [1,1] = [1,1] ++ 1:[1,1] = [1] ++ 1:1:[1,1] = [] ++ 1:1:1:[1,1] = 1:1:1:[1,1] = [1,1,1,1,1] 増加のHaskell(リスト)の例 xs ^+ [] = xs xs ^+ (_:ys) = 1:xs ^+ ys [1,1,1] ^+ ['a','b'] = 1:[1,1,1] ^+ ['b'] = 1:1:[1,1,1] ^+ [] = 1:1:[1,1,1] = [1,1,1,1,1] http://mevius.5ch.net/test/read.cgi/tech/1598336253/106
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.030s