パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

emacs lispのリスト中抜き関数」記事へのコメント

  • 「Case 3: '(1)→'()だけどうにかならないか」を諦めちゃうのであれば、普通に関数で書いた方がすっきりすると思います。

    あと、せっかくなのでimproper-listに対応しました。こんな感じです:
    Case 4: (nakanuki! 2 '(1 2 3 . 4)) => '(1 2 . 4)
    Case 5: (nakanuki! 0 '(1 . 2)) => 2
    Case 6: (nakanuki! 1 '#1=(1 2 3 . #1#)) => '#1=(1 3 . #1#) ;; うーん。これは今ひとつかも。

    (defun nakanuki! (idx lst)
        "lisからidx番目を破壊的に取り除く"
        (unless (= 0 idx)
            (error "idxの値(%d)がヘンです

    • (unless (= 0 idx)

      (unless (<=
      のミスですかね?"<"はタグ開始とみなされて投稿時に消えてしまうので

      「Case 3: '(1)→'()だけどうにかならないか」を諦めちゃうのであれば

      マクロにしたのは「Case 3 : '(1) -> '()」を一部でも対応するためです。
      (let ((subs '(1))) ;; subs にリストを束縛
                  (nakanuki 0 subs) ;; => nil ;; subs[0] を 中抜く
                  subs) ;; => nil
      仕様として一定ではないのは、やはりイマイチなのですが…

      普通に関数で書いた方がすっきりすると思います。

      そうなのですよね。
      今回は、「同じリストを参照している変数があることを前提に、リスト実体に対して中抜きを行なう」という目的でした。
      ですけど私用以外で使うなら「同じリストを参照している変数があること」を対応する仕様から切り捨てて、
      非破壊関数で実装した方が、improper-listに対応する仕様も組み込められますし、Lispのパラダイムとも合うでしょうね。

      まぁ…何故中抜き関数/マクロがネット上に落ちていないかが、分からさせられます。

      親コメント
      • オフトピ。

        (unless (<=
        のミスですかね?"<"はタグ開始とみなされて投稿時に消えてしまうので

        "&lt;"といちいち書き換えるのが対処法ですね。
        // …とコメントするためには"&amp;lt;"と書くわけですが。
        個人設定のオプション>コメント投稿>標準のコメント投稿モードを‘ホントのtext形式’と
        変更した後でコメントすることでも解決策になるのかどうかは確かめたことない。

        手っ取り早い話はhttp://books.google.co.jp/books?id=qQP5AAAAQBAJ&pg=PA92&lpg=PA... [google.co.jp]
        とか一次ソースとかで確認するなりマクロ置換をする入力フォームを自前で用意するなり。。。

        親コメント

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

処理中...