Rebol

RebCall

世の中には凄い人がおられまして、Rebolにパッチを当てて有償版のRebol/Commandを買わずしてAPIコールを可能にするものです。 http://mortimer.devcave.net/projects/rebcall こういう貧乏人根性は…とも思うのですが、大変有り難いかもです。 REBOL [] do/ar…

子プロセスの実行は

有償版の機能のようです。 http://www.rebol.net/cookbook/recipes/0024.html つ、つかえねー。 タイムスタンプが2003年のままのものに金出す人もいないのではないでしょうか…。

スクリプト言語

見てないデータ型も大量、肝心のインターネットOSという怪しいスローガンにもかすりもしていませんが、bindとparseで、もういいのかなという気がしてます。Undocmentedに近いところで、どうやら.dll読んでAPIコールできるらしい、なんてネタもあってこれなら…

parse

Rebolのparseは、split兼正規表現といいますか。正規表現というものは必ずしもPerlやgrepなんかのあの構文で書く必要は無くて、NFAまでいかなくても、あらかじめその言語のデータ構造にばらしておけば正規表現インタプリタが正規表現自体の字句解析を行うと…

PATHリスト

ぼつぼつなにかやってみるかな、ということで、環境変数PATHをセミコロンで分割して表示するだけのスクリプトを書いてみます。 なんでこんなお題かといいますと、ソフトのインストール時に変なPATH追加されていないか確認したり、新しくPATHを通すときにどの…

シリーズ

>> a: [x y z] == [x y z] >> b: a == [x y z] >> b: next b == [y z] >> a == [x y z] >> append a 1 == [x y z 1] >> b == [y z 1] ブロックは参照で保持され、append等で書き換えるとコピーオンライトなどはなされずに波及します。で、各変数は、ブロック…

オブジェクトモデル

プロトタイプベース…なのか?いや違う。 新しいオブジェクトは、makeで、クローン元か型?を指定して作成します。あくまでクローンであってプロトタイプを参照しているのでは無い様子。クローン元を変更しても追従しません。 型?はdatatype!のインスタンス…

Rebolで書くRebolコンソール2

REBOL [] forever [ error? error: catch [ if error? error: try [ set/any 'it do ask system/console/prompt if value? 'it [prin system/console/result probe :it] ][ throw error ] ] if error? error [ error: disarm :error use [type msg][ type: e…

RebolコンソールをRebolで記述

Rebolのコンソールウィンドウは便利といえば便利なのですが、コマンドプロンプト上で動くインタプリタが欲しい気分のときもあります。 eval相当のdoがあるのですからあっさり書ける…と思いきや。 REBOL [] take1: func [x y][x] forever [ prin ">> " a: inp…

関数を受け取る関数

いわゆるdownward closure、ラムダ式、高階関数、云々。こちらは手続き型言語でも最近のものではもはや当たり前ですね。 >> twice: func [x][x 1 x 2] >> twice func [x][print x] 1 2 なお関数の形を取っていない単なるブロックも、doで実行できます。 >> d…

関数を作る関数

手続き型言語では(template等抜きに)素直に実現するには)スタックポインタの都合で不可能ですが、関数型言語ではとてもおなじみ。カリー化もこの類。 You should avoid using variables that are local to the top level function as an unevaluated part of…

関数定義

functionとfuncとdoesがあります。 >> sign: function [x][r][either x > 0 [r: +1][either x > sign +100 == 1 >> sign -100 == -1 >> sign 0 == 0 >> sign2: func [x][either x > 0 [+1][either x > sign2 +123 == 1 >> sign2 -9999 == -1 >> sign2 0 == 0…

どこからどこまでが引数なのでしょうか

次は関数呼び出し。 括弧が不要ですので、引数がひとつだけのときは順番に係っていくので明白ですが、引数がふたつ以上あるときの係り受けがどうなっているのかは当然の疑問でしょう。 >> join join "abc" "def" "ghi" == "abcdefghi" 簡単に言えば正ポーラ…

1+1…あれ。

1+1をやってみましょう。 >> 1+1 ** Syntax Error: Invalid integer -- 1+1 ** Near: (line 1) 1+1 >> 1 + 1 == 2 演算子もまた識別子扱いですので、空白が必要です。 ならば。 >> ++: :+ >> 1 ++ 1 ** Script Error: ++ expected value2 argument of type: …

なんでもかんでもブロック

Rebolは、Lispが全てS式のように、全てがブロックで、コードもデータも区別がありません。スクリプトファイルも一番外側に [ ] がある扱いだそうです。 ブロックには各種の値と単語が並ぶことになります。 予約語はもちろん存在しません。 単語の扱いは四種…

ワンライナー

前項で改造したコンソールアプリケーション化rebol.exeをコマンドラインから呼びます。 ...>rebol -wq --do "print read http://google.com/" -wはウィンドウを表示しない。-qは余計なものを表示しない。 他にもセキュリティ無視の-sとか、CGIモードの-cなど…

実行環境

Rebolの実行環境には、最小限のRebol/Coreと派手派手なRebol/Viewがありますが、…Rebol/Viewはちょっとだけ入れてみましたところ正直言ってケバイのでRebol/Coreを選択します。 Windowsで動くRebol/Coreの最新版はrebol031.exeですが、これがwinhugsのように…

Revolution in Rebol

k.inabaさんの月替わり企画風に、Rebolやります。*1 実際はいつものように素人の挑戦記録となりHaskellやDの時同様後から<del>タグ入れまくると思いますので、間違いなどありましたら指摘いただければ嬉しいです。 さて、Rebolとはどんな言語かといいますと…本家</del>…