-1

私はLispに比較的慣れていないので、次のコンテキストでネストされたリストを操作するための最良の方法に興味があります:

だから、私は次の機能を持っています:

(defun get-p0 (points)
    (loop for (label x y) in points
    ; collect (list (if (> x y) (+ 2 3))))
    collect (list (get-angle (first points) (second points))))
)

私はそれを次のように呼びます:

(get-p0 '((A 5 2) (B 2 3) (C 8 9)))

私がやろうとしているのは、他の座標に対する各座標の角度を取得することです。たとえば、AB、AC、BA、BC、CA、CB の角度を出力します。私が得ている出力は次のとおりです。

((161.56505) (161.56505) (161.56505))

それは、その時点でのテスト目的のためだけのものでした。私が本当にやりたいのは、一番下と一番左の座標を出力することです。何か案は?

4

3 に答える 3

1

私があなたの目標を正しく理解していれば、次のようなリストを消費して次の'((A 5 2) (B 2 3) (C 8 9))ようなものを返す必要があります(2 2)(点 a の Ayは 2 で、点 B のa はx2 で、これらは最低の座標です)。私は次のようなことをします

(loop for (_l x y) in lst
        minimizing y into min-y minimizing x into min-x
        finally (return (list min-x min-y)))

loopは深く強力な構造なので、関連する PCL の章loop仕様を読むことをお勧めします(特定の状況に最適であることが判明したディレクティブを忘れがちです)。Lisp を初めて使用する場合は、この本全体を実際に読んでみることをお勧めします。

于 2013-04-03T15:06:12.147 に答える