2016-04-09 4 views
0

関数と関数リストを関数に渡そうとしています。リスト内の各項目を次の項目と比較しようとしています。eLispの関数に変数を設定する

機能は次のとおりです。

(defun my-list-function(fn L) 
    (if (< (length L) 2) 
     (message "List needs to be longer than 2") 
     (progn (setq newL L) ;; Save the list locally 
       (while (> (length newL) 1) ;; While list has 2 items 
         (setq t (car newL)) ;; Get first item 
         (setq newL (cdr newL)) ;; resave list minus first item 
         (funcall #'fn t #'car newL))))) ;; pas first two items to a function 

私はエラーを取得しておく - 定トン

+0

関数内でローカル変数を使用する場合は、通常、それを['let'](https://www.gnu.org/software/emacs/manual/html_node/elisp/Local-Variables)でバインドします。 html)を使用します。このコードサンプルでは、​​ 'newL'は実際にはグローバル変数になります。 – legoscia

答えて

2

tを設定する(11.2 Variables that never changeを参照してください)予約名です。 tの代わりに、それが何を含むかを示す別の変数名(たとえば、firstItem)を使用します。

+0

あなたはおかげでロック! – jppower175

1
(setq newL L) ;; Save the list locally 

これはローカルを保存しません。 newLはローカル変数ではありません。 setqは、ローカル変数を宣言しません。 setqは変数にある値を設定します。

+0

あなたはおそらく解決策も言及すべきですが、投票しました:) –