【Ruby・Vim script】世界の中心で、(再帰的に)愛を叫ぶ

はじめに

先日掲示板にてある括弧構文を見ていたら、再帰関数でネストを深くすればより感情が籠もった文章になるのではないかと思いました。

という訳で今回はこんな感じの文章を出力する再帰関数をRubyやVim scriptで作成してみます。

$ ruby recursive_shout.rb すこ 3
すこ(すこ(すこ))

※再帰関数とはその処理の中で自分自身を呼び出す関数のことです。

括弧構文の歴史

スクリプトを作成するにあたりまずは括弧構文の歴史について調べてみました。

どうやら元々は淫夢語録が発祥の様です。(出所不詳)
ある動画内にて「(震え声)」や「(意味深)」などのコメントが流れたことから、性的なものを連想させる構文として定着しました。

そして細かい感情の機微を伝えるのに便利なその性質から、括弧構文は姿形を変えてネット界隈全般に広まっていたものと思われます。

Rubyスクリプト

早速ですがRubyスクリプトで実装してみます。

$message = ARGV[0]
$roop_count = ARGV[1].to_i

def main
  puts recursive_message($message)
end

def recursive_message(message)
  $roop_count = $roop_count - 1

  $roop_count <= 0 ? message : recursive_message($message + "(#{message})")
end

main

使う時は下記の様に実行してみて下さい。

$ ruby recursive_shout.rb [単語] [ループ回数]

Vim script

Vim script版も作成しました。Vim scriptの方がより使い易いですよね。Vim scriptがよく分からない方はこちらをご確認下さい。

command! -nargs=* RecursiveShout :call s:RecursiveShout(<f-args>)
function! s:RecursiveShout(message, count)
  let @* = s:RecursiveMessage(a:message, a:count, a:message)
  let @" = s:RecursiveMessage(a:message, a:count, a:message)
endfunction

function! s:RecursiveMessage(message, count, result)
  if a:count <= 1
    return a:result
  else
    return s:RecursiveMessage(a:message, (a:count - 1), (a:message . '(' . a:result . ')'))
  endif
endfunction

使う時は下記の様に実行してみて下さい。

:RecursiveShout [単語] [count]

※但しcount数がVim標準の関数呼び出しネスト数の上限を上回るとエラーが起こります。

終わりに

謝る時などに使ったら許してもらえたりするかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA