Ich muss Divide definieren, damit List [1,2,3,4,5]
in:
Ich bekomme einen Fehler, der sagt "Arguments are not sufficiently instantiated"
, und ich weiß nicht genug über die Sprache, um herauszufinden, was mein Problem ist, oder ob mein Design sogar richtig ist. Jede Anleitung wäre willkommen.
Also hier ist was ich bisher habe:
%Vor%Dies ist die effizienteste Lösung, die Ihren Spezifikationen für die meisten Prolog-Implementierungen entspricht:
%Vor%Wenn es Ihnen nichts ausmacht, welche Elemente in die Unterlisten eingehen, sofern sie ähnlich lang sind (wie in der Lösung von Konstantin Weitz), dann können Sie verwenden:
%Vor%append ist ein vordefiniertes Prädikat, also könnte das Problem sein: Ссылка
Sie haben auch nie 'N' in LängeI definiert - Sie müssen die leere Liste als 0 setzen, nicht N / Es gibt wahrscheinlich auch eine Größenfunktion
Der Unterstrich teilt Prolog mit, dass uns dieses Bit in dieser Prädikatdefinition egal ist.
So etwas sollte funktionieren
%Vor%Sie müssen die Größe nicht überprüfen. Mach es einfach so:
%Vor% Sicherlich ist der Effekt dieses Codes ( lengthIs(L2, M) < lengthIs(L1,N)/2 -> ...
) nicht das, was Sie erwarten: Er vergleicht keine Zahlen, sondern Begriffe. Du solltest es so schreiben:
Ein anderer Tippfehler wie der Fehler: Die erste Klausel von lengthIs / 2 sollte
lesen %Vor% Eine andere Antwort,
verwendet Backtracking viel, ist aber nicht sehr performant.
append
und length
werden als vordefiniert angenommen:
Oh, Entschuldigung, ich habe gerade gesehen, dass dies eine Art Neuformulierung der Antwort von Philip Whitehouse ist.