統計解析R たぶんpart3くらい (587レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
471: 2023/02/26(日)00:14 ID:Qcp1BikG(1/6) AAS
上のコード`uncertainly`の挙動を"プロミスの罠"と書くことにする。
ここでの"プロミス"は、JSの"プロミス"ではなくて、Rでの"変数"の
実装方法を指す。

* [6 Functions | Advanced R](外部リンク:adv-r.hadley.nz

この記事には次の一節がある。

> You cannot manipulate promises with R code. Promises are like a **quantum state:**: ...

多分、ここでの"量子状態"はハイゼンバグと同じ現象を指しているんだと思う。
観測すると、状態が変化してしまう。
省14
472: 2023/02/26(日)23:03 ID:Qcp1BikG(2/6) AAS
書けるかな?
473: 2023/02/26(日)23:09 ID:Qcp1BikG(3/6) AAS
自分の知る限り、プロミスの罠にハマるのは次のパターンに限られる。

~~~ {.r}
x = "hello"
g = f (x)
x = "world"
g ()
~~~
"関数を返す関数"`f`に、"変数"`x`を代入した時にプロミスの罠が可能性が
出てくる。Rの評価戦略はHaskellと同じ
[コールバイニード](外部リンク:en.wikipedia.org
省17
474: 2023/02/26(日)23:11 ID:Qcp1BikG(4/6) AAS
コールバイニードを実現するためには、コンパイラーが内部的に次のように
書き換える必要があると思う。

``` {r a_1451, dependson = ""}
polite = with (new.env (), {
const = \(x) \(...) x
x_1 = "hello"
g = const (identity (x_1))
x_2 = "world"
g () |> print ()
});
省9
475: 2023/02/26(日)23:12 ID:Qcp1BikG(5/6) AAS
``` {python a_14213, dependson = ""}
##| cache: false
#
def none ():
id = lambda a: a
const = lambda x: lambda * y: x
def lhs ():
x = "hello"
g = const (id (x))
x = "world"
省19
476: 2023/02/26(日)23:25 ID:Qcp1BikG(6/6) AAS
この書き換え規則を適用した結果、関数`rhs`では、静的単一代入への変換は、
[ラムダ計算](外部リンク:en.wikipedia.orgのアルファ変換
に置き換わる。この意味では、静的単一代入とアルファ変換は同じことになる。
実際のコードでは、分岐、ループ、副作用が入ってくるので、こんな単純は
話では済まないと思うが、極度に単純化すると、静的単一代入とアルファ変換は、
単に、方言の違いということになる。

Rの場合は、書き換え規則[rule](#rule)は等価な変換にならない可能性がある。
特に、プロミスの罠が現れた場合は、挙動が変わると思う。

余談だが、書き換え規則[rule](#rule)をモナドに拡張したものがHaskellの
[do-記法](外部リンク:en.wikibooks.orgになっている。
省13
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s