2010-12-13 9 views
1

Lispでクイックソートをするのに問題があります。クイックソートのサブリストを修復する

私の目標は次のとおりです。

リストは0または1の要素が含まれている場合、それはすでにソートされています。それ以外の場合は、次のようにソートします。まず、リストの最初の要素であるピボットを取得します。次にリストの残りの部分を(DOLISTを使用して)調べ、各要素をピボットと比較します。要素がピボットより小さいか等しい場合は、それを左のサブリストに入れます。そうでない場合は、CONSまたはAPPENDを使用して右のサブリストに配置します。 Qsortを呼び出して左サブリストと右サブリストをソートします。最後に、左サブリスト、ピボット、および右サブリストを1つのソート済みリストに結合します。

これは私のコードです:

(defun qsort (x) 
    (if (>= 1 (length x)) 
     (format t"~%~s is already sorted" x) 

     ((let (pivot (first x)) 
     (dolist (i x) 
      (if (>= pivot (nth i x)) 
       (list y (nth i)) 
       (list z (nth i)))) 
     (appned y z))))) 

まだ私はひどく

を取得することにより、壁にぶつかるように見えるが、ラムダを形成:(LET(PIVOT(FIRST X))(DOLIST(IXのPIVOT)コンパイラからのIF(> = PIVOT(NTH IX))(リストピボット(リスト)PIVOT(リスト)PIVOT(リストH))

お手伝いができたら幸いです。ありがとうございました。

答えて

1

なぜLETの周りに2つのカッコがありますか?

なぜバインディングの周りにLETの中にカッコのレイヤーがないのですか?

なぜ(nth i x)を呼び出しますか?なぜ私は?

1つの引数でNTHを呼び出すのはなぜですか?

APPNEDとは何ですか?その名前の機能はありません。

(> = X 1)である(plusp x)から

より...

関連する問題