Traversal über das letzte Element von 'gefiltert'

9

Ich möchte eine Traversierung filtern und dann das letzte Element auswählen, das mit over verwendet werden soll.

z.B. etwas wie das (aber was wird eigentlich kompilieren):

%Vor%

Irgendwelche Ideen?

P.S. Mir ist bewusst, dass filtered nur gültig ist, wenn die Anzahl der Elemente in der Traversierung nicht beeinflusst wird.

Der tatsächliche Anwendungsfall, den ich ausführe, besteht darin, nur die niedrigste Ebene eines rekursiven uniplate Traversals auszuwählen, das mit einem Prädikat übereinstimmt; Wenn du andere Ideen hast, wie das geht, würde ich sie gerne hören!

    
Chris Penner 19.06.2017, 02:05
quelle

2 Antworten

2

Dies ist nicht wirklich eine Antwort, nur eine Nachfolge von @Gurkenglas, die für einen Kommentar zu groß ist. Beachten Sie, dass @ Gurkenglas die Antwort:

%Vor%

kann wie ein Traversal aussehen , aber es ist nicht so, selbst wenn Sie die Elementanzahl beibehalten, weil es (aus offensichtlichen Gründen) gegen das zweite Traversalgesetz verstößt:

%Vor%

Damit es sich um eine Traversierung handelt, müssen Sie beide die Elementanzahl und die Filtereigenschaft als Invarianten beibehalten.

Ob das für Ihre Anwendung wichtig ist, weiß ich nicht, aber seien Sie sich bewusst, dass partsOf mit solchen Vorbehalten behaftet ist, und die Dokumentation deutet irreführend darauf hin, dass das Ergebnis von partsOf ein Lens sein wird Pflegen Sie die Elementanzahl. (Das gilt für partsOf each , das Beispiel in der Dokumentation, aber nicht allgemein.)

    
K. A. Buhr 20.06.2017, 13:56
quelle
2
%Vor%     
Gurkenglas 19.06.2017 12:05
quelle

Tags und Links