Just One Line/ja

From DocBase

Jump to: navigation, search

Contents

一行での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].

1 - webページのソースを表示する

print read http://www.rebol.com
  • 概要: とっても単純。webページからHTMLソースをコンソールに表示する。
  • 作者: RT
  • 長さ: 31 文字

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 文字

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 文字

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 文字

5 - series (list, 文字列、その他) の最後の要素を取り除く

remove back tail list
  • 概要: この行は、ブロックや文字列、あるいはその他のseriesから最後の要素を取り除く。これはむしろイディオムというべきだろうが、掲載の価値はある。
  • 作者: RT
  • 長さ: 21 文字

6 - webページのテキストをファイルに保存する

remove-each tag page: load/markup http://www.rebol.com [tag? tag] write %page.txt page
  • 概要: この行は、webページを読み、その中の全てのタグを取り除き(テキストだけを残す)、呼び出されたページ.txtというファイルに書き出す。注意: REBOLの新しいリリースが必要だ。
  • 作者: Carl Sassenrath
  • 長さ: 87 文字

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 文字

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

9 - Print web server ID (WebサーバのIDを表示)

p: open http://www.rebol.com:80 print p/locals/headers/server close p
  • 概要: ウェブサイトのサーバの名前とバージョンを表示する。
  • 作者: Sunanda
  • 長さ: 69 文字

10 - Push

Push: func[Stack[series!]Value /Only][head either Only[insert/only Stack :Value][insert Stack :Value]]
  • 概要: seriesに値を追加して、seriesの先頭(head)を返す。
  • 作者: Andrew Martin
  • 長さ: 102 文字

11 - Pop

Pop: function[Stack[series!]][Value][Value: pick Stack 1 remove Stack :Value]
  • 概要: seriesの先頭の値を返すとともに、それをseriesから取り除く。
  • 作者: Andrew Martin
  • 長さ: 77 文字
  • 関連する一行野郎: 10

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

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 文字

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 文字

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 文字

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 文字

17 - Surprise Message (びっくりメッセージ)

random/seed pick sig: {B aRt hcJnetrhuEOkL!eraso} 21 random sig
  • 概要: REBOLっぽいサインを出力する。(HTMLがBの後の2つめのスペースを消している、あなたはこれを実行する前に、そのスペースを書き足さないといけないかもしれない。)
  • 作者: Allen Kamp
  • 長さ: 64 文字

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 文字

19 - Console history (コンソールの履歴)

hist: does [repeat k system/console/history [print [";" k]]]
  • 概要: コンソールの履歴を表示する。
  • 作者: Romano Paolo Tenca
  • 長さ: 60 文字

20 - NewProbe

newprobe: func [value][help value :value]
  • 概要: 最新のβバージョンが必要(訳注:実際のバージョン番号等は不明)。もっと使いでのあるprobe。「view newprobe layout [button "probe"]」と試してみよう。
  • 作者: Romano Paolo Tenca
  • 長さ: 41 文字

21 - Random string (乱択文字列)

copy/part random "abcdefghijklmnop" 6
  • 概要: パスワードなんかに使える6文字のランダムな文字列を生成する。
  • 作者: Anonymous
  • 長さ: 37 文字

22 - Display REBOL logo (REBOLのロゴを表示する)

view center-face layout [image reb-logo.gif [unview]]
  • 概要: この一行野郎では、a)REBOLのロゴをwebからダウンロードし、b)画面の中央にウィンドウを開き、c)ロゴを表示し、d)あなたがロゴをクリックすればウィンドウを閉じる。〔訳注: wikiだと、ロゴが表示されていますが、ページのソースを見てください。〕
  • 作者: Anonymous
  • 長さ: 83 文字

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

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

25 - Remove all occurrences of a value from a series (seriesの中から重複するものを削除する)

until [ not remove find list item ]
  • 概要: この一行野郎はブロックや文字列、その他のserieで与えられた値の中から重複するものを削除する。一行野郎24番よりも少し分かりやすい。
  • 作者: Laurent Chevalier
  • 長さ: 35 文字
  • 関連する一行野郎: 24

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 文字

27 - Weekday?

Weekday?: func[Date[date!]][pick system/locale/days Date/weekday]
  • 概要: 日付けの曜日を返す。こんな具合に使う:「Weekday? 25/Dec/2002 ; == "Wednesday"」
  • 作者: Andrew Martin
  • 長さ: 65 文字

28 - D6 (6面ダイスを振る)

D6: does [random 6]
  • 概要: D6は、6面ダイス(訳注:普通の立方体のサイコロ)を振るように、1から6の範囲の乱数を返す。初めに乱数発生器のシードを設定するのを忘れずに! こんな具合だ:「random/seed now」
  • 作者: Andrew Martin
  • 長さ: 19 文字

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 文字

=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 文字

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

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 文字

33 - Daytime Server (日時サーバ)

s: open tcp://:13 forever [close insert first s to-idate now]
  • 概要: Daytimeサーバデーモンを実行する。使い方はこう: read daytime://localhost これでサーバに接続し、現在のサーバの日時を取得する。
  • 作者: DocKimbel
  • 長さ: 61 文字

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 文字

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 文字

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 文字

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 文字

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 文字

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 文字

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 文字

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 文字

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 文字

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

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

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 文字

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

Notes

  1. . 一行の長さは? 私達は132文字以内に制限した。これは古いラインプリンターでの標準だ。
  2. . "REBOL []" という部分は必要なの? あなたが単に例をコンソールにカット&ペーストする場合は必要ない。
  3. . これらのうちのいくつかはもっと小さくできる。私達はそれらの編集や最適化を行なっていない。


Updated 29-Mar-2007. Copyright 2007 REBOL Technologies

Translated 11-Dec-2008.

Personal tools