9

Es ist einfach, in Clojure eine Lazy-Sequenz von natürlichen Zahlen zu definieren: (def N (iterate inc 0)). Es überrascht nicht, wenn wir Clojure bitten, das Minimum von N unter Verwendung von (apply min N) zu finden, wird es in einem unendlichen Regress stecken bleiben.Wie kann ich Clojure helfen zu verstehen, dass 0 die kleinste natürliche Zahl ist?

Gibt es eine Möglichkeit, die Tatsache, dass (= 0 (min N)) in die Datenstruktur von N? Implizit, wir wissen dies, da die Inkrementfunktion inc streng zunimmt. Die min Funktion weiß nicht, wie man dieses Wissen ausnutzt, und stattdessen versucht, den Weg zur Antwort brutal zu erzwingen.

Ich weiß nicht, wie programmgesteuert zu kodieren. Ich möchte einen Weg, um Lazy-Sequenzen mit zusätzlichen Strukturen wie Constraints & Relationen zu konstruieren. Ich möchte auch einen Weg, diese Einschränkungen zu nutzen, um Optimierungsprobleme zu lösen (wie das Finden des Minimums oder Infimums der Sequenz).

Gibt es eine Möglichkeit, dies in nativen Clojure zu tun? Was ist mit Datomic?

+0

Wohin passt Datomic? Versuchen Sie, diese zusätzliche Einschränkung zu speichern? – Jared314

Antwort

6

Sie können Metadaten für das spezifische Beispiel verwenden, das Sie haben.

Wenn Sie etwas generalisierteres benötigen, müssen Sie möglicherweise Ihren eigenen Typ erstellen.

Verwandte Themen