トップページtech
1001コメント306KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2012/06/27(水) 10:21:10.18
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/
0809デフォルトの名無しさん2012/09/17(月) 22:46:26.46
foldr1 (\x y -> if f x < f y then y else x)

をもう少しコンパクトに書ければいいが
0810デフォルトの名無しさん2012/09/17(月) 23:24:10.76
自分のコードではf x < f y を on (<) f x y にしてたけど、短いかと思いきやむしろ長くて読みにくいだけだったでござる

minBy, maxBy::(a->b)->a->a->a
とか需要あると思うんだけど、案外用意されてないんですね…
0811デフォルトの名無しさん2012/09/17(月) 23:30:30.84
コンパクトに書くことよりも、読んですぐに意味が分かるコードにした方が良いと思う。

もちろん、もっとコンパクトにした方が意味をくみ取りやすいのなら、そうすべきだが。
0812デフォルトの名無しさん2012/09/17(月) 23:35:45.92
>>808
{-# LANGUAGE NoMonomorphismRestriction #-}
import Data.List
import Data.Ord
maximumWith = maximumBy . comparing

こんなん出ました。
死ね、単相性制限。
0813デフォルトの名無しさん2012/09/17(月) 23:45:14.99
>>812
型宣言を省略するからそういう事になる
0814デフォルトの名無しさん2012/09/17(月) 23:56:16.16
import Data.Function (on)
import Data.List (maximumBy)

maximumWith :: Ord b => (a -> b) -> [a] -> a
maximumWith f = maximumBy $ on compare f

このfを消したくなるのは病気
0815デフォルトの名無しさん2012/09/18(火) 00:03:41.76
細かい事だけどmaximumWithよりはargmaxの方が良い名前
0816デフォルトの名無しさん2012/09/18(火) 00:05:56.26
maximumWithはパクった
自分の頭ではmaximumFとかmaximum'とか本当に酷いのしか思い浮かばなかった
0817デフォルトの名無しさん2012/09/18(火) 00:09:00.12
ワロタ、正直だな
0818デフォルトの名無しさん2012/09/18(火) 00:09:53.02
>>814
> このfを消したくなるのは病気

maximumWith = (maximumBy .) $ on compare

と、ついやってしまうって事?

それなら確かに病気だ
0819デフォルトの名無しさん2012/09/18(火) 13:43:41.26
らんらんるー
0820デフォルトの名無しさん2012/09/19(水) 00:09:53.82
自己書き換えを制限、gotoを制限、
動的型を制限、オブジェクトに制限
こうやって複雑さを増やすコードに制限をもうけることで大規模なプログラムが作りやすくなる。
0821デフォルトの名無しさん2012/09/19(水) 00:11:51.04
http://blog.ezyang.com/2012/09/common-misconceptions-about-safe-haskell/
SE Linuxみたいで拒否反応ががが。
0822デフォルトの名無しさん2012/09/19(水) 01:06:09.10
>>820
言語仕様で制限された機能を実現するプログラムを作るための教育コストを考えてほしい
0823デフォルトの名無しさん2012/09/19(水) 07:14:44.19
>>822
なんで必要な機能がデフォルトで制限されている、あるいは無いHaskellの
プログラマを教育しようとするの。

その機能が必要だと分かっているのなら C/C++ のプログラマを教育すればいいじゃん。
Javaで十分ならJavaプログラマを教育すればいいわけだし。

Haskellでプログラムする必要性がなければ、
無理に制限された機能を実現する必要は無いんだぞ。
0824デフォルトの名無しさん2012/09/19(水) 07:50:36.00
Haskellで制限されてて困ってる機能を
具体的にくわしく
0825デフォルトの名無しさん2012/09/19(水) 16:17:46.79
>>824
goto
0826デフォルトの名無しさん2012/09/19(水) 18:53:43.42
Monomorphism Restriction
0827デフォルトの名無しさん2012/09/19(水) 19:27:06.56
>>825
どういう状況で goto がなくて困った?


>>826
どのような状況で Monomorphism Restriction がなくて困ったのでしょうか。
08288062012/09/19(水) 19:59:36.28
>>807
ありがとうございます
取り合えずこんなのを書いてみたんですがダメでした……

{-# LANGUAGE FlexibleInstances #-}
class FilterContext a

instance FilterContext [a]
instance FilterContext ([a], [a])

filter' :: (FilterContext b) => (a -> Bool) -> [a] -> b

filter' = filter

filter' p xs = (ts, fs)
where ts = filter p xs
fs = filter (not.p) xs
0829デフォルトの名無しさん2012/09/19(水) 22:01:27.55
一番外側のループは手続きでやりたいときもある
0830デフォルトの名無しさん2012/09/19(水) 22:06:30.41
>>829
意味が分からない
0831デフォルトの名無しさん2012/09/19(水) 22:38:01.25
>>828
filter'をclass FilterContextのメソッドにしろ。
それぞれのインスタンス宣言で実体を定義しろ。
0832デフォルトの名無しさん2012/09/19(水) 22:42:44.87
{-# LANGUAGE FlexibleInstances, TypeFamilies #-}
import Prelude hiding (filter)
import qualified Prelude

type family Elem a :: *

type instance Elem [a] = a
type instance Elem ([a],[a]) = a

class FilterContext b where
filter :: (Elem b ~ a) => (a -> Bool) -> [a] -> b

instance FilterContext [a] where
filter = Prelude.filter

instance FilterContext ([a],[a]) where
filter p xs = (ts, fs)
where ts = filter p xs
fs = filter (not.p) xs

こういう事がやりたいんだろうか
一々型アノテーション付けるの面倒じゃないかなぁ・・・
0833デフォルトの名無しさん2012/09/20(木) 01:12:30.86
>>827
関数の途中で未処理の計算を保存したまま一旦プロンプトを出して問い合わせ処理を行いたいときにgotoがなくて困った
0834デフォルトの名無しさん2012/09/20(木) 01:20:19.18
Continuation使えばよくね?
0835デフォルトの名無しさん2012/09/20(木) 05:27:58.43
>>834
Continuation の教育コストを考えてほしい
0836デフォルトの名無しさん2012/09/20(木) 07:15:09.59
>>835
教育を受ける人のやる気とか能力による。

普通に Haskell で何かアプリを作れる人なら、
全く苦にならずに理解できる。
08378062012/09/20(木) 14:49:01.48
>>831,832
ありがとうございます、うまくいきました
type familyとかtype instanceとか、(Elem b ~ a)は
haskell 2010 language reportに無いような気がするのですが、GHC独自の拡張ですか?
type familyとtype instanceについてはGHC users guidの7.7に説明が見つけられたのですが、
(Elem b ~ a)はどういう意味なんでしょうか。

型アノテーションについてですが、確かにそうなんですが、
内部のあまり直接触れないものであるけど、最適化の為にまとめた方が良いような処理の場合、
複数の関数を作るよりまとめてしまったほうがいいかな、と思ってこういう事に興味を持ちました。
内部で用いる場合は大体letなどの代入で用いるので、その場合は型アノテーションは省略出来る事も多いと思い、
関数名が減る利点のみを得られるかと思います。

しかしなんか型システムを騙すために色々やらなきゃならないんですね……
0838デフォルトの名無しさん2012/09/21(金) 16:43:10.99
「Elem b ~ a」は「Elem bとaは同じ型である」って意味ですね
ただまあ832の例は関数従属と多引数型クラスでも複雑にはならない

{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies #-}
module Mult where
import Prelude hiding (filter)
import qualified Prelude as P
import qualified Data.List as L

class FilterContext a b | b -> a where
  filter :: (a -> Bool) -> [a] -> b

instance FilterContext a [a] where
  filter = P.filter

instance FilterContext a ([a], [a]) where
  filter = L.partition

*> filter (> 5) [1..10] :: [Int]
[6,7,8,9,10]
*> filter (> 5) [1..10] :: ([Int], [Int])
([6,7,8,9,10],[1,2,3,4,5])
0839デフォルトの名無しさん2012/09/21(金) 23:33:42.96
>>836
断言するが、プログラマのやる気と能力を必須とする言語はウンコ
0840デフォルトの名無しさん2012/09/21(金) 23:47:50.17
>>839
縦列駐車もおぼつかないクズが、F1マシンをウンコと言ってるようなもんだな(´・ω・`)
0841デフォルトの名無しさん2012/09/21(金) 23:48:10.76
うんこプログラマはヤル気も能力も無くていいのか。
0842デフォルトの名無しさん2012/09/21(金) 23:57:06.43
>>839
それがどうかしたか?

嫌ならHaskellやめろよ
0843デフォルトの名無しさん2012/09/22(土) 00:50:34.39
>>840
断言するが、日本の公道に置いてあるF1マシンはウンコ
0844デフォルトの名無しさん2012/09/22(土) 00:51:50.24
>>842
だったら、法律でHaskell言語を指定して注文を出すのを禁止すべき
特に大学
大学なんだから自分たちで作れ!!!
0845デフォルトの名無しさん2012/09/22(土) 01:02:15.71
ちょっと何言ってるかわかんないですね
0846デフォルトの名無しさん2012/09/22(土) 01:17:36.38
>>843
皆乗りこなしてるから安心しろw
0847デフォルトの名無しさん2012/09/22(土) 02:44:58.71
>>838
使うときにaの型がはっきりしていれば、関数従属いらないよね

*Mult> filter (> (5::Int)) [1..10] :: [Int]
[6,7,8,9,10]
*Mult> filter (> (5::Int)) [1..10] :: ([Int], [Int])
([6,7,8,9,10],[1,2,3,4,5])

だから、この問題に関数従属が必須とはいえないが… たしかに使えば便利かも… 悩む
0848デフォルトの名無しさん2012/09/23(日) 01:26:55.71
>>839
簡単な問題は、大抵の言語で解ける。
解くべき問題が難しい場合は、まず解くための記述力が優先であって、扱いやすさは熟れた後から付いてくるもの。
0849デフォルトの名無しさん2012/09/23(日) 01:50:28.65
つまんない議論だな、分からない腹いせにウンコとかw

こういうところが分かりづらかったとか、分からないとか、建設的な話をしようず
0850デフォルトの名無しさん2012/09/23(日) 04:04:53.83
教育方法が分からない
0851デフォルトの名無しさん2012/09/23(日) 08:16:38.24
本を読め
0852デフォルトの名無しさん2012/09/23(日) 09:22:32.71
教育って現場での教育?
入門書を読ませるのでは駄目なの?
0853デフォルトの名無しさん2012/09/23(日) 10:32:49.97
Haskellは漢字と同じ
仮名を知らないやつに漢字を教える方法がわからない
0854デフォルトの名無しさん2012/09/23(日) 10:42:21.90
ピンインの無い時代の中国人は直接漢(ry
0855デフォルトの名無しさん2012/09/23(日) 12:10:15.29
教育方法が分からないものを現場で使うなんていう判断は普通はしない
0856デフォルトの名無しさん2012/09/23(日) 12:15:08.32
おまえが教育ができないバカというだけ
ついでにマルチ書き込みするバカでもあるな
0857デフォルトの名無しさん2012/09/23(日) 14:35:44.74
>>855
使用する言語を自由に選べるソフト会社はごく一部
0858デフォルトの名無しさん2012/09/23(日) 14:51:30.87
やる気のない奴に教えるのが難しいのは分かるけど、言語関係なくね?
>>855はどういう言語なら教育できるのか
なぜそれがHaskellだと通用しないと思うのか
0859デフォルトの名無しさん2012/09/23(日) 14:52:36.17
>>857
普通、そのような選択肢の少ない会社は C/C++ か Java か、
せいぜい C# くらいしか選べない。

が、これらはたいてい、少なくともその会社のアプリを作るに当たっては、
教育コストはそれほど高くなく、また実績も数多くあるので、
教育方法が分からないものを現場で使うなんて判断はしない。
0860デフォルトの名無しさん2012/09/23(日) 14:55:45.78
>>859
分かりにくくてすまない

>>855>>850 の「教育方法が分からない」を受けて
>>852 が言った「教育って現場での教育?」を俺(>>855)が受けてのレスだ。
0861>>8602012/09/23(日) 14:56:46.07
うわーごめん

>>860>>858 へのレスね
0862デフォルトの名無しさん2012/09/23(日) 15:02:00.13
自然言語だとSecond Language Acquisitionとかいう分野で、
言語を使えるようになるメカニズムとか、効率的に教えるor覚えるのはどうするのか、とかよく研究されてるけれど
プログラミング言語でも、そういう研究されてたりするのかな?
0863デフォルトの名無しさん2012/09/23(日) 15:07:17.26
>>859
大学の研究室から受注するのはHaskellとかLispが多い
0864デフォルトの名無しさん2012/09/23(日) 15:11:36.90
>>863
あ、そうなんだ。

すまん、その辺りは正直よく分からん。
大学関係と仕事したことない。
0865デフォルトの名無しさん2012/09/23(日) 15:12:20.98
>>858
Cはシンタックスを覚えさせて、その後、例外処理教えて、その後、開発プロセスの教育に入る
JavaやCobolも同じ

Haskellは例外処理と開発プロセスを教えるときの計算モデルが事例ごとに個別に存在するから教育が難しい
(CやJavaみたいにフローモデルで統一できないので、公理的な原則から演繹する方法がとれない)
0866デフォルトの名無しさん2012/09/23(日) 17:04:27.55
>>865
「計算モデル」という言葉をどういう意味で使ってるのかピンとこないけど、
フローモデルというのが制御フロー(フローチャートとか)のことだとすると、
それはHaskellでそのまま通用すると思う
Haskellだと、第二原則として「入力から出力への関数を書く」というのを
制御フローの次にもってくればいいんじゃね

どうせ「公理的な原則から演繹」するだけで書けるプログラムなんてほとんどないんだから
(たとえば、制御フローを気にしてるだけじゃCやJavaでデータ構造は設計できない)
そんなに大きい問題には見えないけどどうだろう
結局、構文を覚えた後はコードを書いてもらって、それをレビューするというのを
繰り返すしかないし、これは言語に関係ない
0867デフォルトの名無しさん2012/09/23(日) 23:52:03.91
Haskell - Debug Print in if block
ttp://stackoverflow.com/questions/12550276/haskell-debug-print-in-if-block

これもっと早く知りたかったわ
0868デフォルトの名無しさん2012/09/24(月) 01:46:42.01
>>866
CやJavaは「こっち行った後にここでこう飛んで…」みたいな感じで、説明できる
つまり、CやJavaのコードを読むことは、どんなトリッキーなコードも結局は、機械語や擬似コードの羅列を上から下に追ってgotoで飛ぶ作業「だけ」に還元できる

Haskellのコードを読むことを、教育者が簡単に提示できる何かの作業「だけ」に還元できるだろうか
0869デフォルトの名無しさん2012/09/24(月) 07:02:27.96
>>868
簡約するだけ
0870デフォルトの名無しさん2012/09/24(月) 12:50:33.66
Haskellの本ならProgramming In Haskellが良かった
薄いし計算モデルも簡単に説明してるしHaskellのパワーも一通りわかるし
がっつりやらせたければSICPでも読ませとけばいいんじゃね?
0871デフォルトの名無しさん2012/09/24(月) 13:03:59.29
ってか俺は計算モデルよりむしろ
GHCの拡張含めたHaskellの型システム使いこなしのコツ的チュートリアル欲しい……
0872デフォルトの名無しさん2012/09/24(月) 17:17:29.82
>862
ソフトウェア開発で言語そのものの関与は低い。
だからあまり考えられたいないはず。
0873デフォルトの名無しさん2012/09/24(月) 19:01:21.20
使いこなしのコツ的なのは所謂チュートリアルで学べるものではないと思う。
型族とかGADTとか関数従属性とか、個々の使い方はチュートリアルで学べるけどね。

俺はどちらかというと、そういう技を見事に活用したライブラリの紹介などの、
ベストプラクティス集みたいなのがほしい。

探しても誰も紹介してないから、仕方なく暇をみつけて
自分でライブラリ漁ってコツコツと使い方コレクションを作ってる。
0874デフォルトの名無しさん2012/09/25(火) 02:07:42.43
あれはあれ、これはこれ、でTipsにしか見えないイデオムが多くて困る
0875デフォルトの名無しさん2012/09/25(火) 15:44:53.23
>>973
うp
0876デフォルトの名無しさん2012/09/25(火) 19:25:48.94
>>875
いや、まだ人様にお見せできる状態じゃないよ。
ライブラリのソースと、「abc.hs で**という使い方してる。スゲー」
とか書いたちょっとしたメモとを紐付けして保存してるだけ。

どちらかというと、ぱっと見て気にかかったことを忘れないようにメモってる感じ。
cabal でライブラリをインストールする時はいつも、
インストール処理中にソースをざっと眺めるようにしてるから。

いつか読み返して、他とも関連も併せてちゃんとまとめ直したい。
0877デフォルトの名無しさん2012/09/25(火) 20:40:09.02
haskellwikiあたりにこっそりページ作って
コード片と出典と簡単なコメントつけるだけでも
結構需要あるんじゃないかなあ
0878デフォルトの名無しさん2012/09/25(火) 23:49:47.98
どっちのスレに書き込むべきか悩んだんだけど,Haskellに限った話なのでこっちに.
Haskell Platform付属のEmacs用haskell-modeってyasnippet.elと相性悪い?
TABがhaskell-modeのインデンテーション補完に取られてyasnippetの$0とか$1の位置に動けない.スニペット展開すると即確定になる.
0879デフォルトの名無しさん2012/09/27(木) 00:33:24.95
yasnippetをC-TABにしてる俺は問題ない。
0880デフォルトの名無しさん2012/09/27(木) 02:09:08.89

男ならメモ帳だろ
0881デフォルトの名無しさん2012/09/27(木) 09:23:42.82
便乗してぼやくと、vimにneco-ghc入れても、AutoComplPopが補完メニューを展開してくれないからつらい
0882デフォルトの名無しさん2012/09/27(木) 16:30:15.23
日本法人のツイートはウソばかり。って有名だが。
都合が悪い時は黙る。とかね。
0883デフォルトの名無しさん2012/09/27(木) 19:04:57.90
どこからの誤爆だ?
0884デフォルトの名無しさん2012/09/27(木) 22:13:11.00
Twitter全体に言えそう
0885デフォルトの名無しさん2012/09/27(木) 23:33:49.86
Haskellのtwitter API ってどれがメジャー?
0886デフォルトの名無しさん2012/09/28(金) 01:06:58.11
haskellってファイバー使える?
0887デフォルトの名無しさん2012/09/28(金) 11:12:18.81
使えたとしても副作用があるので隔離される
副作用がないならシングルスレッドで簡約した場合と全く同じ結果になるはずだ
0888デフォルトの名無しさん2012/09/28(金) 17:14:04.32
用法としてはStateモナドが近い
0889デフォルトの名無しさん2012/09/28(金) 23:06:06.94
ファイバーと継続とモナドとajaxは近い
0890デフォルトの名無しさん2012/09/29(土) 13:55:57.95
Haskellのdataはなんで代数的データ型と言うの?

C言語のstructは代数的データ型とは言えないの?
0891デフォルトの名無しさん2012/09/29(土) 14:40:13.63
andとorがあって再帰的定義できてこその代数型
0892デフォルトの名無しさん2012/09/29(土) 14:43:00.27
代数的データ型は何らかの代数的構造を持つデータ型だ、と考えていい?

逆に言えば、代数的構造を持たないのは代数的データ型ではない?
0893デフォルトの名無しさん2012/09/29(土) 14:50:31.72
>>892
駄目
間違い
0894デフォルトの名無しさん2012/09/29(土) 15:31:09.97
じゃあ、Haskellにおける「代数的」ってどういう意味なんだ?
0895デフォルトの名無しさん2012/09/29(土) 15:38:43.56
>>894
>>891
0896デフォルトの名無しさん2012/09/29(土) 16:04:28.53
すまん
「andとorと再帰的定義」 これと 「代数」 これの関わりを
もう少し説明してくれないだろうか。

Haskellのデータ型でのandとorというのは、次のこと?

(and) => data A = X a b c
(or) => data A X | Y

あと、再帰的定義ができることも分かる。

しかし、どのあたりが代数なのか、俺は他人にちゃんと説明できないんだ。
08978962012/09/29(土) 16:05:10.62
>>896
ミスった(イコールを忘れた)

(or) => data A = X | Y
0898デフォルトの名無しさん2012/09/29(土) 16:20:08.39
勉強はじめたところでオレも良く分かっていないが…

代数的データ型の「代数的」な所以は代数のクラスを抽象化するのに
必要十分なだけの情報を持っていることじゃないかな。

例えば、「単位元と二項演算子を一つ持つ」代数のクラスを考えた場合、
data A= Unit | Op A A

という代数データ型があれば

0 + (0 + 0)も
1 + (1 * 1)も

Op Unit (Op Unit Unit)という式に抽象化することができる。
(これが、X |-> 1 + X * X なる関手の始代数である、ということだと思う)

こういう抽象化ができる、というかこういう抽象化によって見出すことができるデータ型が代数的データ型ということ
じゃないかなぁ、というのが勉強を始めてところの今の理解
0899デフォルトの名無しさん2012/09/29(土) 16:25:42.31
なるほど。

代数的構造を持っているのではなくて、
代数的構造を表現できるから代数的データ型なのか。
09008982012/09/29(土) 16:33:41.99
あ、

> 1 + (1 * 1)も



> 1 * (1 * 1)も

の誤記。すまん。


ついでに、書いておくと
>>898の例で、

concrete :: (a, a -> a -> a) -> A -> a
concrete (u, _) Unit = u
concrete a@(_, o) (Op x y) = o (concrete a x) (concrete a y)

という関数があれば、Aで作られた抽象的な式を、具体的な式に復元?することもできる。
concrete (0, +) (Op Unit (Op Unit Unit)) === 0 + (0 + 0)
concrete (1, *) (Op Unit (Op Unit Unit)) === 1 * (1 * 1)
0901デフォルトの名無しさん2012/09/30(日) 00:45:34.84
代数的って言葉に特に定義ないよ。そもそものところでブレてるし。
少なくとも統一見解はない。
0902デフォルトの名無しさん2012/09/30(日) 00:56:45.35
>>901
一般じゃ無くて、Haskell の data で定義できる型に限ったことでいいよ。
そこにおける「代数的」ってどういう意味、という話。
0903デフォルトの名無しさん2012/09/30(日) 01:12:40.48
そんなに不思議かな
代数とは「集合とその集合の上に定義された演算の対」
0904デフォルトの名無しさん2012/09/30(日) 01:13:42.99
×演算
○演算の集合
0905デフォルトの名無しさん2012/09/30(日) 01:18:38.63
演算の間の代数的な関係によって型を規定するから代数的
0906デフォルトの名無しさん2012/09/30(日) 03:54:11.23
つ 多ソート代数
0907デフォルトの名無しさん2012/09/30(日) 07:40:02.29
>>902
それだったら抽象データ型の理論から始まったやつだ。
このイントロでも読め
http://ci.nii.ac.jp/naid/110003743901
Goguenが始まりだとさ。

一般興味あるなら
Modern Algebra and the Rise of Mathematical Structures
http://www.amazon.co.jp/dp/3764370025
だな。ただ数学的内容は眉唾な部分があるので気を付けないといかん。
俺はもう読む気しないから誰か読んで。
0908デフォルトの名無しさん2012/09/30(日) 09:19:08.01
>>907
おぉ、ありがと。
その論文からいろいろ辿ってみるよ。


> 数学的内容は眉唾な部分があるので
え、どゆこと?

数学的内容の本なんじゃないの?
計算機科学が主で、道具としての数学を解説してる本ってこと?
レス数が900を超えています。1000を超えると表示できなくなるよ。