ブログトップ 記事一覧 ログイン 無料ブログ開設

刺身☆ブーメランのはてなダイアリー

2009/08/07(Fri)

mapconcat

Emacs Lisp で join みたいなのはないのかと思ってぐぐってたら 折り畳み表示 - (new Hatena).blog() をみつけて、 mapconcat というのを使えばいいことがわかった。

elispでjoin - subpop - subtech にも載っていた。二年前か・・・。

で、現在の環境変数を得るのも getenv というのが使えると知ったので、環境変数をセットしなおすコードを書き直してみたのだけど、うまくうごかない。

(setenv "PATH" (mapconcat 'identity '("/Users/k-kaneko/perl5/bin" "/opt/local/bin/" (getenv "PATH")) ":"))

たぶん、 mapconcat の第二引数に渡す sequence の要素はすべて文字列じゃないといけなくて、でも sequence そのものをクォートしちゃってるから (getenv "PATH") が展開されず、へんな値があるのでエラー、ということじゃないかと思うのだけど、あんまりいい回避策が思い浮かばない。先に一個リストを作っておかないとダメなんだろうか。

結局こんなふうにしてみたけど、これはこれで読みづらい。

(let
    ((seq (cons "/Users/k-kaneko/perl5/bin" (cons "/opt/local/bin/" (cons (getenv "PATH") nil)))))
  (setenv "PATH" (mapconcat 'identity seq ":")))

g000001g000001 2009/08/08 00:28 中身を(展開)評価したい場合は、listを利用すればOKかと思います
(mapconcat #'identity (list (getenv "PATH")) ":")
みたいなのはどうでしょう。

a666666a666666 2009/08/19 23:19 id:g000001 さん
コメントありがとうございます。 list ですか、なるほど。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/a666666/20090807/1249639655