プログラミングと現実世界と哲学の話

副作用を持つ閑数は閑数と呼べるのか → プログラミングにおける状態とは何か → 現実世界とは何か → 人の生きる意味とは何か←ココマデ!
17
NaOHaq(苛性ソーダ) @NaOHaq

つか、「λ計算におけるλ式」でないものをλ式と呼ぶのがややこしいというのなら、評価する度に値が変わったり、場合によっては値すら返さないただの手続きの塊を「関数」と呼ぶのはどうなのかと小一時間(ry

2012-10-05 22:28:19
NaOHaq(苛性ソーダ) @NaOHaq

そういう意味だと、Pascalは関数(function)と手続き(procedure)の意味が分けられていて好感が持てる。使ったことはないが(

2012-10-05 22:31:17
NaOHaq(苛性ソーダ) @NaOHaq

@myuon_myon あーなんか誤解があるような気がするんですけど、多くのプログラミング言語において「関数」が「数学でいう関数」を指すのでないのと同様に、色々な言語で導入されている「λ式」は「λ計算におけるλ式」を書くために使われているわけではないです。

2012-10-05 23:31:16
みょん @myuon_myon

@NaOHaq ラムダ計算におけるラムダ式を実装した言語もあります そしてそれがラムダ式と呼ばれる以上、そうでないものをラムダ式と呼びたくはありません(使う使わないの問題ではなくてできるできないの問題ですよね?)

2012-10-05 23:33:10
NaOHaq(苛性ソーダ) @NaOHaq

ちなみに、functionという用語が文字通り数学的な関数の意味で使われている(知る限りで)数少ない言語の一つはPostscript

2012-10-05 23:35:40
みょん @myuon_myon

@NaOHaq まぁ、そういうことです HaskellとかPythonのラムダ式はそのままラムダ計算のラムダ式ですから、そうでないものをラムダ式と呼ばないでということですね

2012-10-05 23:35:59
みょん @myuon_myon

函数型言語の函数って数学的な函数だと思ってたんですけど違うんですか><

2012-10-05 23:36:31
@YuishiYumeiji

@myuon_myon プログラミング言語的な関数も, 見方を変えると(environmentを暗黙に引数として取っていると看做すことで)数学的な関数と同一視できます.

2012-10-05 23:37:56
NaOHaq(苛性ソーダ) @NaOHaq

Postscriptのfunctionはちゃんとdomainも定義できます

2012-10-05 23:38:16
みょん @myuon_myon

@YuishiYumeiji environmentを引数に取るって例えばどんな函数です?

2012-10-05 23:41:50
@YuishiYumeiji

@myuon_myon int x; int plus_x(int y){ return y + x; } とします. このとき関数plus_xは大域変数int xの値に依存して挙動が変わります.

2012-10-05 23:45:39
みょん @myuon_myon

@YuishiYumeiji …それってHaskellだとどうなるんですか??

2012-10-05 23:46:31
@YuishiYumeiji

@myuon_myon 全ての大域変数と, それに束縛されている値のペアからなる連想配列をenvとします. 改めてplus_x(int y, Env env) { return y + env["x"]; } と定義すれば, これは元の引数と, 環境を取る関数とみなせます.

2012-10-05 23:48:26
NaOHaq(苛性ソーダ) @NaOHaq

@myuon_myon @YuishiYumeiji HaskellだとIOモナドがそれに当たると思います。 IO a はEnvironment -> (Environment, a) という型の関数とみなすことができます

2012-10-05 23:53:05
みょん @myuon_myon

@YuishiYumeiji 何となく分かりましたけど、それって明示的に環境を受け取っていますよね?暗黙的というのは前者の函数をさして言っているんです??

2012-10-05 23:53:16
みょん @myuon_myon

@NaOHaq IO aって*->(*,a)何ですか?じゃあIO aにEnvironment型の何かを作用させることが出来るんです?

2012-10-05 23:54:22
ふみ (DJ Monad) @fumieval

State Env aをrunStateすると、Env -> (a, Env)という関数になる

2012-10-05 23:57:43
@YuishiYumeiji

@myuon_myon はい, 前者は後者のsyntax sugarとみなせます. プログラミング言語的な意味での関数と, 数学的な意味での関数とが互いに移りあえるのだから, (移りあえる限りにおいて)前者を後者と同一視しても問題ないのでは, という発言です.

2012-10-05 23:58:23
みょん @myuon_myon

@fumieval Stateモナドを用いて外部に定数ではなく`変数'を作っていると考えるんですか?

2012-10-05 23:58:24
ふみ (DJ Monad) @fumieval

@myuon_myon そういうことです。Stateモナドに包まれた計算は、getとputに関して変数のような働きをします。

2012-10-06 00:00:37
みょん @myuon_myon

@YuishiYumeiji 前者と後者、数学的にも別の函数として定義することできるんじゃないんです…?

2012-10-06 00:02:32
ふみ (DJ Monad) @fumieval

Stateモナドはs -> (a, s)を皮で包んだものと考えれば簡単

2012-10-06 00:02:35
NaOHaq(苛性ソーダ) @NaOHaq

@myuon_myon プログラマが明示的に作用させることはできません。ここでいうEnvironment型の値はHaskellのランタイムが起動時に与えます。またEnvironmentへのアクセスは実装が隠蔽されていてHaskellのプログラムからは見えません。

2012-10-06 00:03:44
@YuishiYumeiji

@myuon_myon それは別の同値関係の上での話ですね.

2012-10-06 00:04:06
1 ・・ 8 次へ