1
A
答えて
1
(define rem-atoms
(lambda (lat)
(cond
((null? lat) lat)
((not (pair? (car lat))) (rem-atoms (cdr lat)))
(else
(cons (rem-atoms (car lat)) (rem-atoms (cdr lat)))))))
リストが空の場合は、空のリストを返します。それがアトム(またはリストではない)の場合は、それを除去するだけです。それがリストの場合は、リストのcarとcdrの両方で関数を再帰的に呼び出します。
3
こんにちは、ツリー再帰と呼ばれる手法は、この種の問題に役立ちます。
私はGregの回答の一般的な構造に同意しますが、ネストされたリストからアトミック(非リスト)値を明示的にフィルタリングする必要があると思います。さらに検査時に
(define (rem-atoms lst)
(cond
((not (list? lst)) lst)
((null? lst) (list))
(else
(filter
(lambda (a) (list? a))
(cons (rem-atoms (car lst))
(rem-atoms (cdr lst)))))))
(rem-atoms '(f (x y) z() (k()))) ; --> (()() (()))
(rem-atoms '(f x (y))) ; --> (())
、Gregの良い解決策への小さな修正は今も正しい結果を提供します。具体的には:(not(pair?xx))ではなく(not(list?xx))。
(define (rem-atoms lat)
(cond
((null? lat) lat)
((not (list? (car lat))) (rem-atoms (cdr lat)))
(else
(cons (rem-atoms (car lat))
(rem-atoms (cdr lat)))))))
(rem-atoms '(f (x y) z() (k()))) ; --> (()() (()))
(rem-atoms '(f x (y))) ; --> (())
Hmm。私はこの2番目のバージョンが一番好きだと思います!
私はここで新しいですが、これが役立つことを願っています。
関連する問題
- 1. 原子のルビーメソッド?スキーム
- 2. より速いスキーム機能?
- 3. Google Apps Scriptの原子的に取り消し可能な機能
- 4. スキームで余分なリストレベルを取り除くには?
- 5. 原子力発電所の機能プログラミング?
- 6. 原子テキストエディタ:オートコンプリートが機能しない
- 7. ArgumentError:ステージから子を取り除く
- 8. スキームの署名機能?
- 9. Couchbaseのは、原子インクリメント(続く)(取得)
- 10. が不適切に私は次のスキーム機能持つスキーム機能で
- 11. スキーム取りnと、リスト機能、およびリストを返すのn
- 12. iPhoneアプリでsmsスキーム機能を実装
- 13. StackExchange.Redisを使用したRedisからの原子の読み取りと削除
- 14. ブートストラップなどを使用して不要なCSS /機能を取り除く
- 15. spring webflux:WebSocketアダプタを原子炉ネットサーバに取り付ける純粋に機能的な方法
- 16. XCodeスキームごとのエンタイトルメント/機能
- 17. スキームの反復洞の機能
- 18. Google Cloud機能からのリアルタイムデータベースの原子的更新
- 19. 機能プログラミングの原則
- 20. 反応prerender.io Googleが機能していないとして取り除く
- 21. 強く、コピーして、弱く、原子と非原子で割り当てるためのカスタムセッター?このよう
- 22. 並べ替え可能なパネル、特定の要素からドラッグ可能な機能を取り除く
- 23. AS3 - 子供の問題を取り除く
- 24. PHPの文字列から電子メールアドレスを取り除く
- 25. @ OneToMany-associationから子を取り除く:CascadeType.ALL + orphanRemoval = true not working
- 26. クリックイベントから子要素を取り除く方法
- 27. チタン子供のパフォーマンスの問題を取り除く
- 28. 角度DIがその子インジェクタを取り除くとき?
- 29. 電子メールの返信から元のメッセージを取り除く
- 30. Linearlayoutは子を取り除くことができません
私の間違いを解消してくれてありがとう。私は空リストがペアで動作しないことを忘れましたか? – Greg
'list?'を使用する際の問題は2つあります:1.リスト全体をトラバースして、毎回( 'pair? 'はトラバースする必要がないのに対して)適切なリストであるかどうかを判断しなければなりません。不適切なリストも削除しますか?彼らは原子ではありません。私は '(or(pair?foo)(null?foo))'のようなものがより合理的だと思います。 –
ありがとう、クリス。あなたが正しいです! –