0

ノードと隣接ノードで構成される、次のようなグラフを考えてみましょう。

(defparameter *graph* '((A (B C D))
                        (B (A C E))
                        (C (A B D E))
                        (D (A C E))
                        (E (B C D))))

...そして各ノードの一連のラベル:

(defparameter *values* '((A 1)
                         (B 2)
                         (C 3)
                         (D 2)
                         (E 1)))

その形式でグラフを評価し、隣接するノードに同じラベルが付いているかどうかを判断する関数を作成しようとしています。これを C++ または Java で記述していた場合、関数の反復バージョンのロジックは次のようになります。

(defun evaluate-label (graph values)
;; for every node in graph
  ;; for every adjoining node
    ;; if (node.value == adjoiningNode.value)
      ;; return false
;; return true
)

...しかし、どのようなロジックが Lisp に適しているかはわかりません。ましてや、それをコーディングする方法は言うまでもありません。

だから、2つの質問:

  1. この関数の "Lispy" ビットの疑似コードはどのようになりますか?
  2. 関数に具体的にどのような構文機能を追加しますか? があると仮定しましょうcondeveryこの問題に役立ちますか? ラムダ式に頼らずにこれを簡単に行うことができますか?

フィードバックをお寄せいただきありがとうございます。

4

1 に答える 1