Ja, diese :
{-#LANGUAGE TypeOperators, RankNTypes #-}
import Control.Morphism.Zygo
import Control.Morphism.Prepro
import Control.Morphism.Histo
import Control.Functor.Algebra
import Control.Functor.Extras
import Control.Functor.Fix
import Control.Comonad.Cofree
zygohistomorphic_prepromorphism
:: Functor f
=> Algebra f b
-> GAlgebra f (ZygoT (Cofree f) b) a
-> (f :~> f)
-> FixF f
-> a
zygohistomorphic_prepromorphism f
= g_prepro (distZygoT (liftAlgebra f) (distHisto id))
Ja, ich weiß, dass sie ein ( HHOS ) Witz sind. Ich suche ein reales Beispiel für einen einfachen Hack-Wert und nicht zuletzt, um es dem Wiki hinzuzufügen und zu sagen: "Dies ist die idiomatische Art, XYZ auszudrücken." Ich werde ein Kopfgeld dafür geben, falls Sie keine Lösung finden. Wenn Sie völlig verloren sind, worum es geht, hat Edward eine kurze Erklärung zu reddit veröffentlicht.
Geeignete Antworten müssen:
Machen Sie etwas zumindest aus der Ferne und theoretisch rechnerisch nützlich. Das heißt, Antworten, die sich auf reduzieren,
id
sind aus.Verwenden Sie alle Funktionen des Schemas, ohne dass id, const oder ein gleichwertiges Element übergeben werden.
nicht gleich gut durch eine einfache Vanillefalte oder dergleichen auszudrücken, also nicht nur
product
mäanderförmig umsetzen .
Bonuspunkte werden vergeben an:
Bekanntes Problem oder Algorithmus
auf ungewöhnliche Weise gelöst bzw. ausgedrückt, die gewinnt
Klarheit und / oder Leistung
und / oder Hackwert
und / oder lulz, in ungefähr dieser Reihenfolge, sowie
hochrangige Antworten (yay Demokratie)
Bitte beachte auch Edwards Antwort unten. Welche ZHPM-Implementierung Sie verwenden, ist Ihre Wahl.
quelle
IO
in Ihren Stapel aufgenommen hätten, hätten wir die berühmtelaunchMissles
Funktion von SimonPJ verwenden können. Aber ich denke, der Sinn all dieses superreinen abstrakten Unsinns ist es, die Möglichkeit solcher Dinge zu vermeiden.a
kann alles sein, also zögern Sie nicht, einen E / A-Wert zu konstruieren, der Raketen strategisch abfeuert, basierend auf einer Bewertung Ihrer Eingabedaten.Antworten:
Sharon Curtis und Shin-Cheng Mu haben eine funktionale Perle, die Zygomorphismen verwendet, um maximal dichte Segmente zu finden (eine Verallgemeinerung der maximalen Segmentsummen). Zygomorphismen eignen sich anscheinend gut für Schiebefensterprobleme, wenn Sie sich erst einmal daran gewöhnt haben.
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
Ich würde die Autoren für zusätzliche Anerkennung nominieren, da sie die Verwendung des Festkomma-Mu-Funktors vermieden haben.
quelle
foldr
die bereits erstellte Liste einsehen kann), aber das Prepro ist mir nicht sofort klar. Könnten Sie näher darauf eingehen? (Und wenn möglich, geben Sie einen kurzen + süßen Code, den wir auf der Wiki-SeiteBeachten Sie, dass sich die Signatur dieser geändert hat, da sie nicht allgemein genug war und ich sie (als Scherz) in mein Rekursionsschema- Paket aufgenommen habe.
Die Implementierung wurde ebenfalls vereinfacht.
Und aus der neuen Implementierung sollte es offensichtlich sein, wie ein verallgemeinerter zygohistomorpher Präpromorphismus implementiert werden kann, indem die Einschränkung, dass Sie einen
(Base t)-Branching
Stream haben, durch die Verwendung vondistGHisto
stattdessen gelockert wird .quelle