@kyanny's blog

My life. Opinions are my own.

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 ":")))