Neben der oben angesprochenen Modifikation des zu übergebenen Constraint-Ausdrucks werden speziell für die Wissensbasis PC_Advanced.lisp einige weitere Änderungen notwendig, damit die Constraints für die Beispielkonfigurierung die ihnen zugedachte Funktionalität erfüllen können. So wird bei dem Konzept mit Namen Processor die FSB_Rate von einem Intervallwert auf diskrete Werte umgestellt:
(def-do
:name Processor
:oberkonzept PC_Component
:parameter ((Clock {450 466 500 533 550 600 650 700 733 750 800 850})
(Type {'Sockel_7 'Slot_A 'Slot_1})
(FSB_Rate {66 100 133})
(L2_Cache {128 512})
(Icon "cpu" (non-config true))
(Price [160 578])))
Für den Parameter (FSB_Rate {66 100 133}) lässt sich auf diesem Weg ein FD-Solver verwenden, was dem Funktions-Constraint-Beispiel und dem Constraint-Netz aus Abschnitt 3.6.3 f. entspricht. Dieselbe Modifikation wird für das Konzept Mainboard notwendig:
(def-do
:name Mainboard
:oberkonzept PC_Component
:parameter ((Type {'Sockel_7 'Slot_A 'Slot_1})
(AGP_Slot {0 1})
(PCI_Slot [3 6])
(ISA_Slot [0 2])
(FSB_Rate {66 100 133})
(Icon "mainboard" (non-config true))
(Price 350)))
Das ebenfalls benötigte Konzept Memory verfügt in seiner Ursprungsfassung bereits über diskrete Werte für den Parameter FSB_Rate:
(def-do
:name Memory
:oberkonzept PC_Component
:parameter ((Capacity {16 32 64 128 256}(default 128))
(FSB_Rate {66 100 133}(default 133))
(Icon "simm" (non-config true))
(Price [64 560])))
Die jeweiligen Unterkonzepte der genannten Konzepte benötigen keine Anpassung, da hier bereits jeweils ein diskreter Wert vorliegt. Die eigentliche Constraint-Relation mit dem zugehörigen konzeptuellen Constraint stellt sich demnach wie folgt dar:
(def-constraint-relation
:name func_FSB_Rate
:constraint-typ :funktion
:externe-pins (MB_FSB_Rate P_FSB_Rate S_FSB_Rate)
:beschraenkungs-funktion "MB_FSB_Rate = P_FSB_Rate;
MB_FSB_Rate <= S_FSB_Rate;
P_FSB_Rate <= S_FSB_Rate;
# medium_consistency")
(def-konzeptuelles-constraint
:name FSB_Rate
:variablen-pattern-paare ((?m :name Mainboard)
(?p :name Processor)
(?s :name Memory))
:constraint-aufrufe ((func_FSB_Rate (?m FSB_Rate)
(?p FSB_Rate)
(?s FSB_Rate))))
Während das konzeptuelle Constraint unverändert ist, wird die Constraint-Relation von einem Tupel-Constraint hin zu einem Funktions-Constraint modifiziert. In dem Constraint-Ausdruck sind drei primitive Constraints enthalten, welche die in Abschnitt 3.6.3 f. beschriebene Abhängigkeit repräsentieren. Der Constraint-Ausdruck, bestehend aus einer Konjunktion mehrerer primitiver Constraint-Ausdrücke, kann vom YACS Constraint-Parser in einem Schritt gelesen werden. Abgetrennt durch ,,#`` als Trennzeichen, wird an die Wrapper-Klasse des YACS-Frameworks der Name der zur Constraint-Verarbeitung zu nutzenden Lösungsstrategie übergeben.