私はclispを使用していますが、使用できるnthcdrの設定可能なバージョンのライブラリがあるかどうか疑問です。設定可能なnthcdr実装が存在しますか?
7
A
答えて
5
あなたはとその周りにハックすることができます:nthcdrは、定義のsetfを持っていない理由を私は知らない
;; !!warning!! only an example, lots of nasty edge cases
(defsetf nthcdr (n lst) (new-val)
`(setf (cdr (nthcdr (1- ,n) ,lst)) ,new-val))
:
(let ((lst (list 1 2 3 4))
(n 2))
(setf (cdr (nthcdr (1- n) lst)) '(5 6 7))
l)
> (1 2 5 6 7)
それとものためのあなた自身のsetfを定義します。 Alexandriaでもsetfは最後には定義されていますが、nthcdrでは定義されていないようです。
PS。私はあなたのコードで悪い匂いとしてnthcdrをsetfしたいと思う扱うだろう。
1
(defsetf my-nthcdr (n list) (store)
(let ((tmp (gensym)))
`(let ((,tmp (nthcdr (1- ,n) ,list)))
(rplacd ,tmp ,store)
(cdr ,tmp))))
動作しませんnはいえ0でLISTは、シンボルであるとき、あなたはそれを動作させることができ、Nは、マクロ展開時にゼロのどちらかであるが、Nが数値であるならば、それだけで動作するかどうかのチェック、または展開されたコードのチェックを含む。
関連する問題
- 1. 観察可能なLINQが存在しますか?
- 2. エラーメッセージ - テスト実行のビルドディレクトリが存在しないか、MTMでアクセス許可が必要です - オートメーション設定
- 3. Qt実行中エラー実行可能ファイルが存在しません
- 4. iPhoneプロジェクト「起動可能な実行可能ファイルがパスに存在しません」
- 5. リフレッシュ可能なGroovyクラスローダは実装していますか?
- 6. 可能System.String実装
- 7. 実行時エラー-f1.exeが存在しないか、実行可能ファイルではありません
- 8. オープン・エンドのインターバル実装はJava用に存在しますか?
- 9. C++のサーキュラーリストの標準実装は存在しますか?
- 10. 可能な限り変数を「ローカル」として定義すると実装が高速になりますか?
- 11. 非再帰的なat_c実装が可能ですか?
- 12. 可能なフルファイルパスを指定してファイルまたは親ディレクトリが存在するかどうかをチェック
- 13. IEquatable を変更可能な型で実装しています
- 14. 可能なAmazon EC2。キーペアは存在しません
- 15. このバックグラウンドスレッドキューは実行可能な実装ですか?
- 16. グローバル設定を保存し、PHPの管理ページから設定可能
- 17. Moqの連鎖可能な実装
- 18. カテゴリ実装可能な問題
- 19. クリック可能なLabelFieldの実装方法。
- 20. minSdkVersionと使用可能なエミュレータを設定しますか?
- 21. HttpServletは、実行可能スレッドまたは拡張スレッドを実装していません。なぜスレッド可能ですか?実行可能するオブジェクトの場合
- 22. プログラミングなしで設定可能なフォームウィザードテクノロジが必要です
- 23. CまたはC++でクローン可能なオブジェクトプールを実装していますか?
- 24. 更新可能なResultsetとRecordsetはFirebird .NET Providerに存在しますか?
- 25. Qooxdoo - 使用可能なロケール存在しない
- 26. jquery-uiソート可能なエラーが発生しました - PUT 501(未実装)
- 27. なぜこの "実行可能な関数"のPython実装が失敗しますか?
- 28. ASP.Net/AJAX Webアプリケーションでユーザーが設定可能なWebページを実装する方法
- 29. Silverlight RIAサービスでSQLを「存在しない」実装
- 30. 実行可能なJARアイコンが設定されていません
なぜそれは悪臭ですか?特に、setfable nthcdrが定義されていない理由がないことを暗示しているとき。 – Paralife
私はそれが欲しいの理由は、私はidp要素の各ノードを注入したいと同時に、各ノードをハッシュテーブルに保存しながら、sexpツリーを横断したいということです。したがって、装飾が行われていない場合、ハッシュテーブルの値は装飾されたサブノードを参照しません。 – Paralife
一般的に、Common Lispでは、リテラルデータを変更すると何が起こるかは定義されていません。 –