私のグループと私は、短所リストのリストを作成しようとしています。こんな感じかも
((2 100032) (4 32413) (6 2131251) ... (232 12))
残念ながら、「間違った型引数」を受け取り続けます。それは単純なことかもしれませんが、短所について何か間違ったことをしているのではないかと私も思います。
感謝されます:
(defun find-diffs ()
(let ((diffs (list))
(index 0)
(previous 0))
(while (< index (length first-ten-million-primes))
; Add the difference to the list of diffs.
(setq diff (- (aref first-ten-million-primes index) previous))
; We only want to bother recording it if the index is above zero and
; the difference is odd.
(if (and (> index 0) (evenp diff))
(setq diffs
; Can we find this one in our list of diffs?
(if (cdr (assoc diff diffs))
; Yes
; ERROR happens when we call this statement
(setq diffs
(append (cons diff (1+ (car (cdr (assq diff diffs)))))
(assq-delete-all diff diffs)))
; No
(setq diffs (plist-put diffs diff 1)))))
; Set previous value to this one.
(setq previous (aref first-ten-million-primes index))
; Increment the index.
(setq index (1+ index)))
diffs)
(setq diffs) をコメントアウトすると修正されますが、変数の設定方法に問題はありません。
ありがとう!
バックトレースが大きいので、最初の部分だけを投稿します。私のチームはまだ何が問題なのか混乱しているため、回答をいただければ幸いです。
デバッガーのバックトレース:
Debugger entered--Lisp error: (wrong-type-argument listp 1)
append((2 . 1) nil)
(setq diffs (append (cons diff 1) diffs))
(if (cdr (assoc diff diffs)) (setq diffs (append (cons diff (1+ (car (cdr (assq diff diffs)))))
あなたの問題は次の場所にあります:
(append (cons diff (1+ (car (cdr (assq diff diffs)))))
(assq-delete-all diff diffs)))
そこcons
まで(DIFF . N)
は、適切なリストではないフォームのセルを作成します。これは、2 つの要素のリストではなく、2 つの要素のペアです。2 つの要素のリスト(DIFF N)
は、 の省略形である形式になり(DIFF . (N . nil))
ます。
あなたの全体的な目標を理解しようとはしていませんが、問題を解決するには 2 つの方法があります。
(append (cons diff FOO)
...)
と
(append (list diff FOO)
...)
または
(cons (cons diff FOO)
...)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加