Oz/Mozart, CTMの補足 ― 2008年01月02日 10時41分46秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://iiyu.asablo.jp/blog/2008/01/02/2541270
Erlang, Oz/Mozart, Prolog, 単一化
で書くといった補足。
プログラミング言語Ozについては、
http://ja.wikipedia.org/wiki/Oz_(プログラミング言語)
http://en.wikipedia.org/wiki/Oz_programming_language
をどうぞ。日本語は英語の翻訳みたいですね。英語のほうがコードも少し載っ
てます。
Ozの実装Mozartについては、これもたびたび紹介しているけど、
http://www.mozart-oz.org/
The Mozart Programming System
をどうぞ。
CTMこと、
http://www.amazon.co.jp/exec/obidos/ASIN/4798113468/showshotcorne-22/
セイフ・ハリディ, ピーター・ヴァン・ロイ, 羽永洋訳「コンピュータプログ
ラミングの概念・技法・モデル」
の補足については、今回探したら、CTMの超超超ダイジェストのような資料が
ありました。
http://www.info.ucl.ac.be/Enseignement/Cours/INGI1131/Scripts/ircamTalk2006.pdf
How to say a lot with few words
をどうぞ。
その他CTMのことは、ウェブやブログにつけている検索窓に CTM を入れて検
索してください。
さて、
http://iiyu.asablo.jp/blog/2008/01/02/2541270
Erlang, Oz/Mozart, Prolog, 単一化
で書いたのは、単一化の話でしたが、ほかにも面白い機能があります。
L = [1 2 X]
と書くと、フツーのプログラミング言語だと、Xが未束縛で値が決まっていな
いと、これはエラーになります。でも、Ozではエラーではありません。
これは、部分値というもので、Ozでは値が完全に決まってない値が扱えるよ
うになっています。
なぜ、そんなことを許すかというと、Ozのもつ並列・並行機能と関係があり
ます。
Erlangは並列・並行プログラミングがやりやすいように、粒度の細かい、軽
量スレッドがありますが、Ozにもあります。そしてErlangとは違って、データ
フロー変数というものによって、非常に簡単にスレッド間の同期が取れるよう
になっているのです。
Ozの変数はデータフロー変数でもあって、この例の場合、Xがデータフロー
変数になっています。
[1 2 X]で、Xに値が入ってないという不完全な状態が部分値ですが、他のス
レッドがXに値を入れればいいので、L = [1 2 X]をエラーにしないのです。そ
して、Xに値が入るまでこれを実行したスレッドは待ち状態になって、値が入
ったら実行を再開するということで、同期が取れるようになっています。
たとえば、Ozの実装実行環境であるMozartで
declare L X in
thread {Delay 10000} X=99 end
{Browse start}
L = [1 2 X]
{Browse L}
とやると、Oz Browserという画面には、まず、startという文字列が表示され、
その次に、最初はLの値として、{1 2 X]が表示されます。そして、10秒後
(10000ミリ秒後)に、Lの値が[1 2 99]と変わります。
この例では、Xに値が入るまで、メインのスレッドは待ち状態になります。
そして、thread文によって生成された別のスレッドが10秒後にX=99を実行する
と同期が取れて、待ち状態が解除されます。
こういうことができるように、L = [1 2 X]という不完全な値(部分値)の代
入を許しているわけです。
言語がサポートするかライブラリがいいかという話を前もしましたが、これ
も言語がサポートすることで、非常に書きやすいものになっている例です。
関連して、プログラミング言語Dの資料に、
http://www.kmonos.net/alang/d/builtin.html
言語の機能 vs ライブラリによる実装
というのがありました。ご参考までに。
余談。
http://iiyu.asablo.jp/blog/2007/01/08/1100922
Rubyネタ
を読んでわかったことですが、
http://iiyu.asablo.jp/blog/2007/12/03/2470954
柏原正三著「プログラミング言語Erlang入門」その2
で、書いた
http://iiyu.asablo.jp/blog/2006/06/01/389616#c693756
にある「かすた」さんのコメントへのコメントを、「Rubyネタ」でもうとっく
に書いていたんですね。^^;
ずっと一言書いてあげないとなと思っていたから、書いてないかと思ってい
た。
もうどんどん忘れていくね。\(^O^)/
ま、書いたことを忘れても、まだ、書かないといけないと意識していたとい
うことは、それだけ重要だと無意識に思っていることだったんだね。
---
http://iiyu.asablo.jp/blog/2008/01/02/2541270
Erlang, Oz/Mozart, Prolog, 単一化
で書くといった補足。
プログラミング言語Ozについては、
http://ja.wikipedia.org/wiki/Oz_(プログラミング言語)
http://en.wikipedia.org/wiki/Oz_programming_language
をどうぞ。日本語は英語の翻訳みたいですね。英語のほうがコードも少し載っ
てます。
Ozの実装Mozartについては、これもたびたび紹介しているけど、
http://www.mozart-oz.org/
The Mozart Programming System
をどうぞ。
CTMこと、
http://www.amazon.co.jp/exec/obidos/ASIN/4798113468/showshotcorne-22/
セイフ・ハリディ, ピーター・ヴァン・ロイ, 羽永洋訳「コンピュータプログ
ラミングの概念・技法・モデル」
の補足については、今回探したら、CTMの超超超ダイジェストのような資料が
ありました。
http://www.info.ucl.ac.be/Enseignement/Cours/INGI1131/Scripts/ircamTalk2006.pdf
How to say a lot with few words
をどうぞ。
その他CTMのことは、ウェブやブログにつけている検索窓に CTM を入れて検
索してください。
さて、
http://iiyu.asablo.jp/blog/2008/01/02/2541270
Erlang, Oz/Mozart, Prolog, 単一化
で書いたのは、単一化の話でしたが、ほかにも面白い機能があります。
L = [1 2 X]
と書くと、フツーのプログラミング言語だと、Xが未束縛で値が決まっていな
いと、これはエラーになります。でも、Ozではエラーではありません。
これは、部分値というもので、Ozでは値が完全に決まってない値が扱えるよ
うになっています。
なぜ、そんなことを許すかというと、Ozのもつ並列・並行機能と関係があり
ます。
Erlangは並列・並行プログラミングがやりやすいように、粒度の細かい、軽
量スレッドがありますが、Ozにもあります。そしてErlangとは違って、データ
フロー変数というものによって、非常に簡単にスレッド間の同期が取れるよう
になっているのです。
Ozの変数はデータフロー変数でもあって、この例の場合、Xがデータフロー
変数になっています。
[1 2 X]で、Xに値が入ってないという不完全な状態が部分値ですが、他のス
レッドがXに値を入れればいいので、L = [1 2 X]をエラーにしないのです。そ
して、Xに値が入るまでこれを実行したスレッドは待ち状態になって、値が入
ったら実行を再開するということで、同期が取れるようになっています。
たとえば、Ozの実装実行環境であるMozartで
declare L X in
thread {Delay 10000} X=99 end
{Browse start}
L = [1 2 X]
{Browse L}
とやると、Oz Browserという画面には、まず、startという文字列が表示され、
その次に、最初はLの値として、{1 2 X]が表示されます。そして、10秒後
(10000ミリ秒後)に、Lの値が[1 2 99]と変わります。
この例では、Xに値が入るまで、メインのスレッドは待ち状態になります。
そして、thread文によって生成された別のスレッドが10秒後にX=99を実行する
と同期が取れて、待ち状態が解除されます。
こういうことができるように、L = [1 2 X]という不完全な値(部分値)の代
入を許しているわけです。
言語がサポートするかライブラリがいいかという話を前もしましたが、これ
も言語がサポートすることで、非常に書きやすいものになっている例です。
関連して、プログラミング言語Dの資料に、
http://www.kmonos.net/alang/d/builtin.html
言語の機能 vs ライブラリによる実装
というのがありました。ご参考までに。
余談。
http://iiyu.asablo.jp/blog/2007/01/08/1100922
Rubyネタ
を読んでわかったことですが、
http://iiyu.asablo.jp/blog/2007/12/03/2470954
柏原正三著「プログラミング言語Erlang入門」その2
で、書いた
http://iiyu.asablo.jp/blog/2006/06/01/389616#c693756
にある「かすた」さんのコメントへのコメントを、「Rubyネタ」でもうとっく
に書いていたんですね。^^;
ずっと一言書いてあげないとなと思っていたから、書いてないかと思ってい
た。
もうどんどん忘れていくね。\(^O^)/
ま、書いたことを忘れても、まだ、書かないといけないと意識していたとい
うことは、それだけ重要だと無意識に思っていることだったんだね。
コメント
_ 穴山 ― 2008年01月04日 18時28分31秒
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。
トラックバック
_ ホットコーナーの舞台裏 - 2010年03月01日 01時33分04秒
ASAHIネット(http://www.asahi-net.or.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://iiyu.asablo.jp/blog/2010/02/19/4890951
Lispの神様 竹内郁雄教授の最終
---
http://iiyu.asablo.jp/blog/2010/02/19/4890951
Lispの神様 竹内郁雄教授の最終
_ ホットコーナーの舞台裏 - 2014年09月10日 10時09分18秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
オライリー・ジャパンの矢野さん。献本、ありがとうございました
---
オライリー・ジャパンの矢野さん。献本、ありがとうございました
_ ホットコーナー - 2017年09月13日 09時25分06秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonから。
---
「Reactビギナーズガイド」のお買い上げがあって、JavaScriptのReact(いろんなReactがあるので、ReactJSと書くことにする)関係、そして、Reacti
---
「Reactビギナーズガイド」のお買い上げがあって、JavaScriptのReact(いろんなReactがあるので、ReactJSと書くことにする)関係、そして、Reacti
出版社名の「翔泳」から, へんを取ると…