2017-06-04 12 views
-1

私はCommon Lispでプログラミングしています。少なくとも2つの共通要素でサブリストを削除するアルゴリズムが必要です。Lisp、2つの共通要素を持つサブリストを削除する

私はどのように問題を解決できるか分かりません。私はこれを使用することを考えた:

(defunを削除-重複リスト(リスト)(削除-重複リスト:「等しい:キー」テストCDR))

が、サブリストの間でcdrが異なっている、と私2つの要素を数えてサブリストを削除する方法を理解できません。 はまた、私は((1 2 3 4)」の例では) "元の" サブリストを削除しない必要があり、ボットのみ(2 3 4)、(1 3 4)

例:

入力: '((1 2 3 4)(2 3 4)(5 6 7 8)(1 3 4)(9 9 9 9))

出力:'((1 2 3 4) ((1.1)(2.3)(4.4))((1.1)(2.2)(9) )(4.3)))

出力: '((1.1)(2.2)(3.3)(4.4))

ありがとうございました!

P.s申し訳ありませんが、私は私の問題をよく説明していない、私はポストで多くの間違いを修正します。これはこのコミュニティの最初の質問ですので、ご容赦ください

+2

:次に、あなたの問題をこのように解決することができ、「宿題の助けを求める質問は、あなたが問題を解決するために、これまでに行った作業の概要、および難易度の説明を含める必要がありますあなたはそれを解決する必要があります。 –

+0

はい、ありがとう、私は今まで私のプロジェクトを完了して、私はこれのためのアルゴリズムを書くのは難しいです。それは簡単ですが、私は立ち往生しています。私は今多くの例を追加します –

+0

あなたのコードを試しましたか?何が起こった? –

答えて

1

実際にはremove-duplicatesとすることができます。少なくとも2つの要素が似ている場合、trueを返すテスト関数を作成する必要があります。例えば。 (length other-list)回はおそらく最も簡単ですつのリストを反復しながら、ハッシュを使用して

(defun two-similar-p (lst1 lst2) 
    ...) 

(two-similar-p '(1 2 3) '(1 4 5)) ; ==> nil 
(two-similar-p '(1 2 5) '(1 4 5)) ; ==> t 

は最速と最高の時間の複雑さです。 StackOverflowのヘルプから

(defun remove-duplicates-list (list) 
    (remove-duplicates list :test #'two-similar-p :from-end t)) 

(remove-duplicates-list '((1 2 3 4) (2 3 4) (5 6 7 8) (1 3 4) (9 9 9 9))) 
; ==> ((1 2 3 4) (5 6 7 8) (9 9 9 9)) 
+0

私はこの関数のコードを書くつもりです(2つの類似-p)、あなたの答えに感謝します。 。私は何か問題がある場合、私はこの投稿を更新するか、多分私はここにコメントを書く –

関連する問題