QA@IT
«回答へ戻る

シンボル名が確認コードのままだったので修正(aml→auto-mode-alist)

5599
 
 ---
 追記:2013/10/05
+指摘を受けて loopマクロ版修正:11:27
 
 既に追加された後で削除されたいとのことですが、その場合は以下のようなものでどうでしょう。
 
 大げさかなのかもしれません(その辺の定石には疎いので実際良いのか悪いのかはわかりません)。
 ```lisp
 (require 'cl)
-(loop for item in aml
+(loop for item in auto-mode-alist
    when (equal '("\\.phtml\\'" . php-mode) item)
-     do (setq aml (delq item aml)) )
+     do (setq auto-mode-alist (delq item auto-mode-alist)) )
 ```
 
 assocと違ってすべての `"\\.phtml\\'"` と `php-mode`のドット対が削除されます。

もっといいやり方がありそうですが、alistから削除するのであれば

(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)


ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
remove-from-listは無いようですね。
(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)


追記:2013/10/05
指摘を受けて loopマクロ版修正:11:27

既に追加された後で削除されたいとのことですが、その場合は以下のようなものでどうでしょう。

((lambda (aml) 
   (while aml
     (if (equal 
         (car aml) 
         '("\\.phtml\\'" . php-mode))
       (setq auto-mode-alist (delq (car aml) auto-mode-alist)))
     (setq aml (cdr aml)) ) ) 
 auto-mode-alist)

loopマクロを使えば以下の様に少なくできますが、clパッケージをロードしないといけないので初期処理にしては
大げさかなのかもしれません(その辺の定石には疎いので実際良いのか悪いのかはわかりません)。

(require 'cl)
(loop for item in auto-mode-alist
   when (equal '("\\.phtml\\'" . php-mode) item)
     do (setq auto-mode-alist (delq item auto-mode-alist)) )

assocと違ってすべての "\\.phtml\\'"php-modeのドット対が削除されます。

もっといいやり方がありそうですが、alistから削除するのであれば

```lisp
(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))
```

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)

---

ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
remove-from-listは無いようですね。
(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)

---
追記:2013/10/05
指摘を受けて loopマクロ版修正:11:27

既に追加された後で削除されたいとのことですが、その場合は以下のようなものでどうでしょう。

```lisp
((lambda (aml) 
   (while aml
     (if (equal 
         (car aml) 
         '("\\.phtml\\'" . php-mode))
       (setq auto-mode-alist (delq (car aml) auto-mode-alist)))
     (setq aml (cdr aml)) ) ) 
 auto-mode-alist)
```

loopマクロを使えば以下の様に少なくできますが、clパッケージをロードしないといけないので初期処理にしては
大げさかなのかもしれません(その辺の定石には疎いので実際良いのか悪いのかはわかりません)。
```lisp
(require 'cl)
(loop for item in auto-mode-alist
   when (equal '("\\.phtml\\'" . php-mode) item)
     do (setq auto-mode-alist (delq item auto-mode-alist)) )
```

assocと違ってすべての `"\\.phtml\\'"` と `php-mode`のドット対が削除されます。

5599
 ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
 remove-from-listは無いようですね。
 (add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)
+
+---
+追記:2013/10/05
+
+既に追加された後で削除されたいとのことですが、その場合は以下のようなものでどうでしょう。
+
+```lisp
+((lambda (aml) 
+   (while aml
+     (if (equal 
+         (car aml) 
+         '("\\.phtml\\'" . php-mode))
+       (setq auto-mode-alist (delq (car aml) auto-mode-alist)))
+     (setq aml (cdr aml)) ) ) 
+ auto-mode-alist)
+```
+
+loopマクロを使えば以下の様に少なくできますが、clパッケージをロードしないといけないので初期処理にしては
+大げさかなのかもしれません(その辺の定石には疎いので実際良いのか悪いのかはわかりません)。
+```lisp
+(require 'cl)
+(loop for item in aml
+   when (equal '("\\.phtml\\'" . php-mode) item)
+     do (setq aml (delq item aml)) )
+```
+
+assocと違ってすべての `"\\.phtml\\'"` と `php-mode`のドット対が削除されます。

もっといいやり方がありそうですが、alistから削除するのであれば

(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)


ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
remove-from-listは無いようですね。
(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)


追記:2013/10/05

既に追加された後で削除されたいとのことですが、その場合は以下のようなものでどうでしょう。

((lambda (aml) 
   (while aml
     (if (equal 
         (car aml) 
         '("\\.phtml\\'" . php-mode))
       (setq auto-mode-alist (delq (car aml) auto-mode-alist)))
     (setq aml (cdr aml)) ) ) 
 auto-mode-alist)

loopマクロを使えば以下の様に少なくできますが、clパッケージをロードしないといけないので初期処理にしては
大げさかなのかもしれません(その辺の定石には疎いので実際良いのか悪いのかはわかりません)。

(require 'cl)
(loop for item in aml
   when (equal '("\\.phtml\\'" . php-mode) item)
     do (setq aml (delq item aml)) )

assocと違ってすべての "\\.phtml\\'"php-modeのドット対が削除されます。

もっといいやり方がありそうですが、alistから削除するのであれば

```lisp
(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))
```

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)

---

ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
remove-from-listは無いようですね。
(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)

---
追記:2013/10/05

既に追加された後で削除されたいとのことですが、その場合は以下のようなものでどうでしょう。

```lisp
((lambda (aml) 
   (while aml
     (if (equal 
         (car aml) 
         '("\\.phtml\\'" . php-mode))
       (setq auto-mode-alist (delq (car aml) auto-mode-alist)))
     (setq aml (cdr aml)) ) ) 
 auto-mode-alist)
```

loopマクロを使えば以下の様に少なくできますが、clパッケージをロードしないといけないので初期処理にしては
大げさかなのかもしれません(その辺の定石には疎いので実際良いのか悪いのかはわかりません)。
```lisp
(require 'cl)
(loop for item in aml
   when (equal '("\\.phtml\\'" . php-mode) item)
     do (setq aml (delq item aml)) )
```

assocと違ってすべての `"\\.phtml\\'"` と `php-mode`のドット対が削除されます。

5599
 連想配列からキーを元に要素を求め(assoc)
 連想配列から取り除いたもの(delq)を
 連想配列に再設定してます(setq)
+
+---
+
+ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
+remove-from-listは無いようですね。
+(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)

もっといいやり方がありそうですが、alistから削除するのであれば

(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)


ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
remove-from-listは無いようですね。
(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)

もっといいやり方がありそうですが、alistから削除するのであれば

```lisp
(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))
```

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)

---

ちなみに removeは存在しますが要素のインデックスを指定する必要があります。
remove-from-listは無いようですね。
(add-to-listがaddの特殊版(重複を意識するバージョン)ですが、対になる適切な処理が特にないからでしょうかね?)

回答を投稿

もっといいやり方がありそうですが、alistから削除するのであれば

(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)

もっといいやり方がありそうですが、alistから削除するのであれば

```lisp
(setq auto-mode-alist 
       (delq (assoc "\\.phtml\\'" auto-mode-alist) auto-mode-alist))
```

ではいかがでしょう。
連想配列からキーを元に要素を求め(assoc)
連想配列から取り除いたもの(delq)を
連想配列に再設定してます(setq)