0

任意の長さとデータ型のリストを指定すると、次のように計算されます。

  • 下の項目
  • 上位項目
  • シンボル
  • 平均
  • 逆リスト(関数の実装)

私のクラスはちょっと役に立たないので(私の他の質問を読んでください=_=;)、私はこれをやった:

(defun higher(l)
    (let (x)
        (setf x (first (sort l #'>)))))

もちろん、シンボルを注文しませんでした...だから私はこれを試しました:

(defun higher(l)
    (let ((x 0))
        (dolist (a l)
            (setf a (coerce a 'integer))
            (if (> a x)
                (setf x a)))
        x))

しかし、強制はシンボルを整数にするのに役立っていません...あなたの助けを前もって感謝します。また、私がうまくフォーマットしているかどうかを知りたいです(「let」の使い方を教えられませんでした)。

4

1 に答える 1

3

シンボルは文字型ではないため、関数 #'Char> はシンボルでは機能しません。

シンボルを比較する前に、symbol-nameを使用できます:

(symbol-name 'a)
CL-USER> "A"

#'string> を使用できるようになりました

任意のデータ型を比較す​​る関数を作成するには、typecaseを使用できます。小さな例:

(defun compare> (x y)
  (when (subtypep (type-of x) (type-of y))
    (typecase (and x y)
      (integer (> x y))
      (character (char> x y)))))

Terjeが言ったように、ソートは使用しないでください。reduce方がはるかに優れています:)

于 2011-05-26T07:39:20.753 に答える