Just One Line/ja
From DocBase
[edit]
一行でのREBOL (一行野郎)
(Original: http://www.rebol.com/oneliners.html)
(Translation ver. 0.3. Translated by skoba.)
REBOLは一行野郎の長い歴史がある。 ここには、REBOLユーザーから送られた、45個の一行野郎の例がある。 (訳注:「一行野郎」とは、「プログラミング言語AWK」(A.V. エイホ/ B.W. カーニハン/ P.J. ワインバーガー=著、足立 高徳=訳、トッパン (1989))にてOne Linerの訳語とされたもの。)(訳注: 番号づけのミスと思われるが、実際には46個ある。また、REBOL/Core、REBOL/Viewのバージョンによると思われるが、いくつか現在のバージョンでは動かないものもある。)
一行野郎は俳句のようなものだ。 いつでも役に立つわけでもなく、いつでも読み易いわけでもないが、書く楽しみがある。 どのような芸術の場合とも同様に、あるものは他のものよりも良く、しかし時折、本物の宝石が現れる。
一つを試すためには、コードをREBOLコンソールにカット&ペーストするだけだ。
See [other notes at end].
[edit]
1 - webページのソースを表示する
print read http://www.rebol.com
- 概要: とっても単純。webページからHTMLソースをコンソールに表示する。
- 作者: RT
- 長さ: 31 文字
[edit]
2 - GUIを開いて、webページを読んで、それをメールする
view layout [u: field "user@rebol.com" h: field "http://" btn "Send" [send to-email u/text read to-url h/text alert "Sent"]]
- 概要: この例は、GUIフォームを表示するウィンドウを開く。あなたが、emailアドレスとwebページのURLを入力する。REBOLはそのwebページの内容を、入力したemailアドレスに送信する。あなたは、REBOLで設定された自分自身のSMTP emailを持っていなければならないことに気をつけよう(REBOL/ViewのUser preferences)。
- 作者: Carl Sassenrath
- 長さ: 125 文字
[edit]
3 - 全部のファイルをFTPでアップロードする
foreach file load %./ [if not dir? file [write/binary join ftp://user:pass@example.com/ file read/binary file]]
- 概要: FTPを使って、ディレクトリ内の全てのファイルをアップロードする。ファイルは、テキストでも、画像でも、webページでも何でも構わない... ただし、ディレクトリは除く。
- 作者: RT
- 長さ: 111 文字
[edit]
4 - TCPポート・スキャナ
repeat n 100 [if not error? try [close open probe join tcp://localhost: n] [print [n "is open"]]]
- 概要: これはシンプルなポート・スキャナだ。与えられたTCPアドレスについて、アクセス可能な最初の100個のポートを返す。アドレスはホスト名でも番号(訳注:IPアドレスだろう)でも構わない。localhostという名前であなたのマシンのポートをスキャンする。数字を(100よりも)大きくすることで、より多くのポートをスキャンさせることも可能だし、あるいはREPEATではなくFORを使うことで特定の範囲のポートをスキャンさせることも可能だ。
- 作者: Anonymous
- 長さ: 98 文字
[edit]
5 - series (list, 文字列、その他) の最後の要素を取り除く
remove back tail list
- 概要: この行は、ブロックや文字列、あるいはその他のseriesから最後の要素を取り除く。これはむしろイディオムというべきだろうが、掲載の価値はある。
- 作者: RT
- 長さ: 21 文字
[edit]
6 - webページのテキストをファイルに保存する
remove-each tag page: load/markup http://www.rebol.com [tag? tag] write %page.txt page
- 概要: この行は、webページを読み、その中の全てのタグを取り除き(テキストだけを残す)、呼び出されたページ.txtというファイルに書き出す。注意: REBOLの新しいリリースが必要だ。
- 作者: Carl Sassenrath
- 長さ: 87 文字
[edit]
7 - One Line Quine
REBOL[] do a: {view layout[t: field 500 rejoin["REBOL[] do a: {" a "}"] btn "do" [do do t/text]]}
- 概要: creates a self modifying window. (includes the REBOL Header.)
- 作者: Ammon Johnson
- 長さ: 97 文字
[edit]
8 - Digital Clock (デジタル時計)
view layout[origin 0 t: h1 red black (to string! now/time) rate 1 feel[engage: [t/text: now/time show t]]]
- 概要: デジタル時計を表示する。
- 作者: Ammon Johnson
- 長さ: 106 文字
- 関連する一行野郎: 7
[edit]
9 - Print web server ID (WebサーバのIDを表示)
p: open http://www.rebol.com:80 print p/locals/headers/server close p
- 概要: ウェブサイトのサーバの名前とバージョンを表示する。
- 作者: Sunanda
- 長さ: 69 文字
[edit]
10 - Push
Push: func[Stack[series!]Value /Only][head either Only[insert/only Stack :Value][insert Stack :Value]]
- 概要: seriesに値を追加して、seriesの先頭(head)を返す。
- 作者: Andrew Martin
- 長さ: 102 文字
[edit]
11 - Pop
Pop: function[Stack[series!]][Value][Value: pick Stack 1 remove Stack :Value]
- 概要: seriesの先頭の値を返すとともに、それをseriesから取り除く。
- 作者: Andrew Martin
- 長さ: 77 文字
- 関連する一行野郎: 10
[edit]
12 - Short One Line Quine With GUI
REBOL[] do a: {view layout[field 500 rejoin["REBOL[] do a: {" a "}"]]}
- 概要: quineは自分自身のソースのコピーを出力するプログラムだ。うん、あまり意味は無い。(:Ammon Johnsonのquineはこれの拡張版の一つだ。)
- 作者: Carl Read
- 長さ: 70 文字
- 関連する一行野郎: 7
[edit]
13 - Rotate a series left (seriesを左に回す)
ROL: func ["Rotate Left" s [series!] n [integer!]][n: n // length? s remove/part append s copy/part s n n]
- 概要: seriesを左にn個回す。
- 作者: Gregg Irwin
- 長さ: 108 文字
[edit]
14 - Determine if A is a subset of B (AがBのサブセットか判定する)
subset?: func [set1 [series! bitset!] set2 [series! bitset!]][either empty? difference set1 intersect set1 set2 [true][false]]
- 概要: set1がset2のサブセットかどうかを返す。series!とbitset!の値のどちらでも。〔訳注: コンソールでこの一行野郎を入力したのち、 「subset? [1 2 3] [1 2 3 4]」と入力すると「true」と返る。
- 作者: Gregg Irwin
- 長さ: 126 文字
[edit]
15 - Bye
view l: layout [image red "bye" font-size 50 rate 9 feel [engage: func[f a e][if a = 'time[f/text: "" f/image: to-image l show f]]]]
- 概要: "bye"と表示された赤いボックスが遠くに消えていく。
- 作者: Anton
- 長さ: 132 文字
[edit]
16 - Monty Hall Challenge
w: 100 loop w[w: w - any random[0 0 1]]
- 概要: Montyが山羊を示した後にドアを入れ替える。結果は100回実行した後のパーセンテージだ。(MHC: よく知られ、たびたび話題になる、3つのドアがある確率パズルだ。3つのドアの向こうには二匹の山羊と一台の自動車がある。)〔訳注:goatには山羊の意味と、パワーのある車あるいはクラッシックカーの意味がある。〕〔※最初の一文の意味がよく分からない。原文: Simulates swapping doors after Monty shows a goat. Result is percentage wins after 100 runs. (MHC: a well-known and often debated probability puzzle involving three doors, two goats, and a car)〕.
- 作者: Sunanda (with tweaks from Romano T, Ryan C, Carl R, and Reichart)
- 長さ: 39 文字
[edit]
17 - Surprise Message (びっくりメッセージ)
random/seed pick sig: {B aRt hcJnetrhuEOkL!eraso} 21 random sig
- 概要: REBOLっぽいサインを出力する。(HTMLがBの後の2つめのスペースを消している、あなたはこれを実行する前に、そのスペースを書き足さないといけないかもしれない。)
- 作者: Allen Kamp
- 長さ: 64 文字
[edit]
18 - Show the actual dir or changes it (実際のディレクトリを表示する、あるいは変更する)
cd: func [d [unset! file!]][if value? 'd [change-dir d] what-dir]
- 概要: 単独で使うと、実際のディレクトリを返す。ディレクトリ名をつけて使うと、実際のディレクトリをそこに変更して新しいディレクトリを返す。
- 作者: Romano Paolo Tenca
- 長さ: 65 文字
[edit]
19 - Console history (コンソールの履歴)
hist: does [repeat k system/console/history [print [";" k]]]
- 概要: コンソールの履歴を表示する。
- 作者: Romano Paolo Tenca
- 長さ: 60 文字
[edit]
20 - NewProbe
newprobe: func [value][help value :value]
- 概要: 最新のβバージョンが必要(訳注:実際のバージョン番号等は不明)。もっと使いでのあるprobe。「view newprobe layout [button "probe"]」と試してみよう。
- 作者: Romano Paolo Tenca
- 長さ: 41 文字
[edit]
21 - Random string (乱択文字列)
copy/part random "abcdefghijklmnop" 6
- 概要: パスワードなんかに使える6文字のランダムな文字列を生成する。
- 作者: Anonymous
- 長さ: 37 文字
[edit]
22 - Display REBOL logo (REBOLのロゴを表示する)
view center-face layout [image[unview]]
- 概要: この一行野郎では、a)REBOLのロゴをwebからダウンロードし、b)画面の中央にウィンドウを開き、c)ロゴを表示し、d)あなたがロゴをクリックすればウィンドウを閉じる。〔訳注: wikiだと、ロゴが表示されていますが、ページのソースを見てください。〕
- 作者: Anonymous
- 長さ: 83 文字
[edit]
23 - Save history to file (履歴をファイルに保存する)
write/lines %hist.r head reverse copy rebol/console/history
- 概要: コンソールへの入力の履歴を取得し、それを一行ずつファイルへ書き出す。このやり方で、あなたは関数やスクリプト全体をペーストし、それらを閲覧したり編集のために保存できる。それらを、一番古いコマンドが先頭に表示されるようにソートする。
- 作者: Saw it on the ML a while ago
- 長さ: 59 文字
- 関連する一行野郎: 19
[edit]
24 - Remove all occurrences of a value from a series (seriesの中から重複するものを削除する)
while [ find list item ] [ remove find list item ]
- 概要: この一行野郎は、ブロックや文字列、その他のserieで与えられた値の中から重複するものを削除する。とても単純だが、初心者にとっては時間を節約できるかもしれない。removeをfindと組み合わせてどう使うかを示している。
- 作者: Laurent Chevalier
- 長さ: 50 文字
- 関連する一行野郎: 5
[edit]
25 - Remove all occurrences of a value from a series (seriesの中から重複するものを削除する)
until [ not remove find list item ]
- 概要: この一行野郎はブロックや文字列、その他のserieで与えられた値の中から重複するものを削除する。一行野郎24番よりも少し分かりやすい。
- 作者: Laurent Chevalier
- 長さ: 35 文字
- 関連する一行野郎: 24
[edit]
26 - Log (ログ)
Log: func [Value /Clear][if Clear[delete %Log.txt]write/append/lines %Log.txt reform[now/time mold :Value]:Value]
- 概要: %Log.txtというファイル名で、Rebolの値を保存する。私はCGIスクリプトのデバックの補助に使っている。新しいログファイルを開始するのはこんな具合だ:「Log/clear now」。CGIクエリの文字列の内容は、なんだろう? 「Log Rebol/options/cgi/query-string」
- 作者: Andrew Martin
- 長さ: 113 文字
[edit]
27 - Weekday?
Weekday?: func[Date[date!]][pick system/locale/days Date/weekday]
- 概要: 日付けの曜日を返す。こんな具合に使う:「Weekday? 25/Dec/2002 ; == "Wednesday"」
- 作者: Andrew Martin
- 長さ: 65 文字
[edit]
28 - D6 (6面ダイスを振る)
D6: does [random 6]
- 概要: D6は、6面ダイス(訳注:普通の立方体のサイコロ)を振るように、1から6の範囲の乱数を返す。初めに乱数発生器のシードを設定するのを忘れずに! こんな具合だ:「random/seed now」
- 作者: Andrew Martin
- 長さ: 19 文字
[edit]
29 - Leapyear? (うるう年)
Leapyear?: function[Date[date!]][Year][Year: Date/year any[all[0 = remainder Year 4 0 <> remainder Year 100]0 = remainder Year 400]]
- 概要: Leapyear?は、うるう年の日付けが与えられるとtrueを返す。例えば:>> leapyear? 1/1/2001 とか >> leapyear? 1/1/2000
- 作者: Andrew Martin
- 長さ: 132 文字
[edit]
=30 - clear-me
view f: layout for n 0 19 1[r:(random 19)+ n // 20 append[across]load rejoin["a"n": check on[a"r"/data: a"r"/data xor on show f]"]]
- 概要: 一行ゲーム。×印の20個のボックス(訳注: チェックボックスみたいなの)が横に並んだラインが現れる。目的は、全ての×印を消すこと。ボックス上をクリックすると、そこの×印がトグルで現れたり消えたりする、それとともに別のボックスの×印も消えたり出たりする。簡単にできることもあるが、そうでないこともある。場合によっては達成できない場合もあるかも...
- 作者: Carl Read
- 長さ: 131 文字
[edit]
31 - Paint Drops
view layout[b: box rate 9 effect[draw[pen(random snow)circle(random 99x99)2]blur]box 1x1 rate 9 effect[draw[(b/image: to-image b)]]]
- 概要: 表面(画面?)が色の着いた滴で埋められる。
- 作者: Vincent Ecuyer
- 長さ: 132 文字
- 関連する一行野郎: 15
[edit]
32 - Picture Viewer (画像ビューワー)
view l: layout[origin 0x0 b: box "Load" [error? try [b/image: i: load first request-file b/text: "" l/size: b/size: i/size show l]]]
- 概要: ウィンドウに画像を表示する。他のものを選択するにはそれをクリックする。
- 作者: Vincent Ecuyer
- 長さ: 132 文字
[edit]
33 - Daytime Server (日時サーバ)
s: open tcp://:13 forever [close insert first s to-idate now]
- 概要: Daytimeサーバデーモンを実行する。使い方はこう: read daytime://localhost これでサーバに接続し、現在のサーバの日時を取得する。
- 作者: DocKimbel
- 長さ: 61 文字
[edit]
34 - Send emails with a graphic interface (グラフィックインタフェースのついたメール送信)
view layout [e: field "Email" s: field "Subject" m: area "Body" btn "Send"[send/subject to-email e/text m/text s/text alert "ok"]]
- 概要: emailの送信の簡単なGUI。emailが送られる時に、小さな「ok」のウィンドウが表示される。
- 作者: DocKimbel
- 長さ: 130 文字
[edit]
35 - Morse encoder (モールス信号の生成器)
foreach c ask{Message:}[l: index? find{ etinamsdrgukwohblzfcpövxäqüyj}c while[l >= 2][prin pick{-.}odd? l l: l / 2]prin{ }]print{}
- 概要: 文をモールス信号にエンコードする。このバージョンは最適化されていないので、htmlジェネレータもコードを壊さないだろう。
- 作者: Johan Rönnblom
- 長さ: 130 文字
[edit]
36 - Chess Board
g:[style b box black 50x50 style w b white space 0x0]loop 8[append g head reverse/part [b w b w b w b w return]8]view layout g
- 概要: 駒が置かれていない空のチェスボードを表示する。
- 作者: Sunanda
- 長さ: 126 文字
[edit]
37 - Prime factors (素因数分解)
f: func[n][m: 2 s: 1 w: :append a: copy[]until[either n // m = 0[n: n / m w a m][m: m + s s: 2]if 1. * m * m > n[w a n n: 1]n = 1]a]
- 概要: fは、9'999'999'999'999'999あたり以下(これより後は丸めが発生する)の整数に対する素因数をブロックで返す。 -- 例えば: f 777'666'555'666'777 はこれを返す: [3 7 37 743 1347049607] -- バグ: f 0 と f 2 はおかしい。(訳注: >> f 0 = [2 0] となる。>> f 2 = [2 1] となる。)
- 作者: Sunanda
- 長さ: 132 文字
[edit]
38 - Convert all .bmp files in a directory to .png (ディレクトリ内の.bmpファイルを.pngに変換する)
foreach file load %. [if find file %.bmp [save/png replace copy file %.bmp %.png load file]]
- 概要: ディレクトリ内の全ての.bmpファイルを読み、.pngファイルに変換してセーブする。
- 作者: Bohdan "Bo" Lechnowsky
- 長さ: 92 文字
[edit]
39 - Convert Images to REBOL Script (画像をREBOLスクリプトに変換する)
foreach f load %./ [if find [%.png %.jpg %.bmp] suffix? f [write/append %images.r reform [mold f mold read/binary f newline]]]
- 概要: この一行野郎は、あなたのPNG、JPG、BMPの画像ファイルを、それらをスクリプト内に埋め込んだREBOL形式のファイルに変換する。(base64円コーディングに対しては、"system/options/binary-base: 64"を設定すること。)〔訳注: 現在のREBOL/Viewのバージョンでは「ヘッダが無い」とか、「値が無い」と言われる。〕
- 作者: Anonymous
- 長さ: 126 文字
[edit]
40 - Rule 110 Cellular Automaton (Rule 110 セルラオートマトン)
s:{..1..}loop 38[t: copy{..}forall s[if s/3[append t pick{.1}none? find{..1.11.}copy/part s 3]]print s: append t{..}]
- 概要: 一つだけマークされたセルから、チューリング完全セルラオートマトンへの進化をいくつかのステップで示す。{..1.11.}を、{..11..} や {.1..11}のような別の表現に変えたら、どうなるだろうか? それぞれルール90とルール30では。〔訳注: Rule 110 Cellular AutomatonについてはWikipediaを参照: http://en.wikipedia.org/wiki/Rule_110_cellular_automaton)
- 作者: Errru
- 長さ: 117 文字
[edit]
41 - get decimal length of a number (小数点以下の桁数を得る)
nfrac: func [d][length? second parse join d ".." "."]
- 概要: nfrac 33 => 0 ; nfrac "456" => 0 ; nfrac 0.2104 => 4 ; nfrac "1256.63" => 2 ; nfrac 1.0 => 0 ;
- 作者: collective contribution on www.codeur.org/forum/forum.php?theme=17
- 長さ: 53 文字
[edit]
42 - Print links from Web Page (Web Pageからリンクを表示する)
parse read http://www.rebol.com [any [thru "A HREF=" copy link to ">" (print link)] to end]
- 概要: web pageを読み込んで、解析して、書かれている全てのリンクを抽出および表示する。
- 作者: Christophe Coussement
- 長さ: 91 文字
[edit]
43 - DO history (DO履歴)
dohist: does [d: copy system/console/history forall d [print rejoin [index? d " : " first d]] do pick head d to-integer ask "->"]
- 概要: indexによって履歴を使えるようにする。
- 作者: Fabrice Vado
- 長さ: 129 文字
- 関連する一行野郎: 19 23
[edit]
44 - diapo.r
REBOL [] d: read %. foreach f d [if find f ".jpg" [unview/all view/new/title layout [image f [q]] to-string f wait 4]]
- 概要: スクリプトがあるディレクトリ内に存在する全てのjpgを表示する〔訳注: ファイル名のみ〕
- 作者: Jean-Nicolas MERVILLE
- 長さ: 118 文字
- 関連する一行野郎: 32 38
[edit]
45 - pi.r (円周率)
rebol[] s: 1 i: 0 forever [i: i + 2 s: s * (i / (i - 1) * i / (i + 1)) print 2 * S]
- 概要: John Wallisの公式を用いて、円周率の近似値を求める。精度は、REBOLの制限により15桁に制限されている。中断するにはESCを押してね ;-)。公式はここから(http://www.chez.com/algor/math/pi.htm)。
- 作者: Jean-Nicolas MERVILLE
- 長さ: 83 文字
[edit]
45 - One Line Paint Program (一行野郎ペイントプログラム)
view layout[s: box black 400x400 feel[engage: func[f a e][if find[down over]a[append s/effect/draw e/offset show s]if a = 'up[append s/effect/draw 'line]]]effect[draw[line]]]
- 概要: musiclessonz.comの「the REBOL Absolute Beginers tutorial」の著者がこの一行スクリプトを送ってきた。ウィンドウ内で線を引ける。
- 作者: Nick Antonaccio
[edit]
Notes
- . 一行の長さは? 私達は132文字以内に制限した。これは古いラインプリンターでの標準だ。
- . "REBOL []" という部分は必要なの? あなたが単に例をコンソールにカット&ペーストする場合は必要ない。
- . これらのうちのいくつかはもっと小さくできる。私達はそれらの編集や最適化を行なっていない。
Updated 29-Mar-2007.
Copyright 2007 REBOL Technologies
Translated 11-Dec-2008.
[unview]]
