functional-programming

___ qstnhdr ___ Wie bekomme ich Paare von Elementen aus unendlichen Listen in Haskell? ___ answer21568207 ___
%Vor%

Das wäre aber viel schneller.

%Vor%     
___ answer21601174 ___

Es ist schade, dass Sie @ leftaroundabouts Lösung nicht akzeptiert haben. Es hat viel mehr zu bieten. Zum Beispiel hat die andere Lösung eine Heuristik "alle Zahlen müssen kleiner als n sein" (was tun Sie für Probleme, bei denen Sie diese Heuristik nicht haben?), Und ein paar andere Schritte, die es schwerer machen, das tatsächlich zu beweisen ist eine Lösung für Goldbachs Problem - z Können Sie demonstrieren, dass die Aufzählung der Primzahlen alle nützlichen Primzahlpaare zusammenfasst? (Es tut, aber können Sie es demonstrieren? Dies ist die Schwäche dieser Lösung)

Hier werde ich zeigen, wie Sie die Lösung @leftaroundabout präsentieren können, ohne das Wort "monad" zu sagen.

Das Problem mit dem Listenverständnis, das Sie zuerst erstellt haben, ist, dass es die Lösung "Tiefe zuerst" durchsucht - nehmen Sie ein Element aus der ersten Liste und versuchen Sie dann alle Kombinationen mit diesem Element. Wenn es jedoch eine unendliche Anzahl von Kombinationen gibt, werden Sie niemals Paare mit dem zweiten Element aus der ersten Liste aufzählen. Hier müssen wir über "Breite zuerst" nach Lösungen suchen.

Nehmen wir an, %code% ist ein Generator von Lösungen:

%Vor%

Nehmen wir an, %code% ist ein Generator von Generatoren von Lösungen:

%Vor%

Alles, was wir jetzt tun müssen, ist Lösungen aufzuzählen, indem wir jeweils eine Lösung von jedem Generator nehmen. Wohlgemerkt, wenn die Anzahl der Generatoren unendlich ist, können wir sie nicht einfach einzeln nehmen - so werden wir niemals die zweite Lösung vom ersten Generator bekommen, also müssen wir sie irgendwie "schreiten":

%Vor%

Das ist es.

%Vor%

Jetzt zur Effizienz. Es ist alles in %code% und %code% . Fügen Sie eine Bedingung zu %code% zu %code% hinzu, und es funktioniert auch dann, wenn Goldbachs Vermutung falsch ist (Sie müssen sie jedoch nicht hinzufügen). Fügen Sie eine Bedingung zu %code% zu %code% hinzu, und Sie werden nur die Paare aufzählen, in denen die erste Primzahl größer als die andere ist.

    
___ answer21566020 ___

Der schönste Weg ist die Breite . erste Liste Monade . Da List Comprehensions nur als syntaktischer Zucker der Monade betrachtet werden kann (ähnlich wie %code% ), ermöglicht es Ihnen, es genau so aussehen zu lassen, wie Sie es jetzt haben:

%Vor%     
___ tag123haskell ___ Haskell ist eine funktionale Programmiersprache mit starker statischer Typisierung, verzögerungsfreier Auswertung, umfangreicher Parallelitäts- und Parallelitätsunterstützung und einzigartigen Abstraktionsfunktionen. ___ tag123funktionale Programmierung ___ Funktionale Programmierung ist ein Programmierparadigma, das auf der Erzeugung von Abstraktionen unter Verwendung von Funktionen basiert, die Nebeneffekte und Zustandsänderungen vermeidet. Reine funktionale Programmierung ist threadsicher. ___ tag123lazyevaluation ___ Lazy Evaluation bezieht sich auf eine Vielzahl von Konzepten, die eine Evaluierung vermeiden wollen eines Ausdrucks, außer wenn sein Wert benötigt wird, und um die Ergebnisse der Auswertung eines Ausdrucks unter allen Verwendungen seines Ausdrucks zu teilen, so dass kein Ausdruck benötigt wird mehr als einmal bewertet werden. ___ answer45250130 ___

oder ein Lambda, die unendliche Liste von Paaren aus einer unendlichen Liste von was auch immer gibt

%code%

auf ghci %code%

    
___ qstntxt ___

Allgemeines Problem

Ich habe eine unendliche Liste und möchte ein Paar %code% auswählen, wobei %code% und %code% beide aus der Liste kommen und das Paar eine Eigenschaft erfüllt. Die Verwendung von List Comprehensions scheint nicht zu funktionieren, da die Liste unendlich ist.

Spezifische Instanz

Ich versuche ein Paar Primzahlen zu finden, die sich zu einer bestimmten Zahl addieren (siehe dieses Codegolfproblem <) / a>).

Ich habe %code% definiert, was eine unendliche Liste von Primzahlen ist, aber wenn ich naiv versuche, ein Paar Primzahlen wie unten zu wählen, endet der Prozess nie.

%Vor%

Mir ist klar, dass die Liste der generierten Primzahlen %code% ist. Grundsätzlich wird %code% zum ersten Element von %code% und sobald %code% erschöpft ist, wird es auf das zweite Element verschoben. Weil %code% unendlich ist, wird es niemals erschöpft sein!

Gibt es eine einfache Möglichkeit, List Comprehensions zu verwenden, um dieses Problem zu lösen? Gelingt das nicht, gibt es eine einfache Lösung?

    
___
1
Antwort

Refactoring Domänenmodell mit Mutabilität und zyklischen Abhängigkeiten für Scala mit guten FP-Praktiken arbeiten?

Ich komme aus einem OO-Hintergrund (C #, Javascript) und Scala ist mein erster Ausflug in FP. Aufgrund meines Hintergrunds habe ich Probleme, ein Domänenmodell zu realisieren, das zu meinem Domänenproblem passt, und entspricht auch den guten...
10.07.2014, 13:23
1
Antwort

Wie beweist man die Gleichwertigkeit zweier Typen und dass eine Signatur einzeln bewohnt ist?

Wer dem Blog von Tony Morris und den Scala-Übungen gefolgt ist, weiß, dass diese beiden Signaturen gleichwertig sind: > %Vor% Und: %Vor% Außerdem wurde festgestellt, dass der Typ einfach bewohnt ist (d. h. alle Implementierungen des...
01.09.2010, 22:05
1
Antwort

Elixir / ExUnit: Kontext von Testfall an Teardown / Cleanup-Methode (on_exit) übergeben?

Problem Ich möchte ein Elixir-Modul testen, das mit dem Hostsystem interagiert und über Methoden verfügt, die Nebenwirkungen haben. Für diese Frage und um es kurz zu halten, nehmen wir an, dass es sich um die Erstellung mehrerer Verzeichnisse...
06.03.2017, 11:04
1
Antwort

Funktion, die die Sequenz in eine Liste umwandelt

Das wissen wir %Vor% entspricht %Vor% Ich möchte wissen, ob es eine eingebaute Funktion tolist gibt, die äquivalent zu [] ist, also %Vor% entspricht [a,b,c,d] . Ich denke, dass eine solche Funktion in der funktionalen Prog...
16.11.2017, 03:52
1
Antwort

Suche nach einer Verallgemeinerung des Konstrukts 'if p x then x else empty'

Ich habe ein paar Schnipsel, die sich anfühlen, als würden sie das Gleiche tun, aber ich bin nicht ganz davon überzeugt, dass es ein verallgemeinertes Konstrukt gibt, um mit beiden umzugehen. An einer Stelle habe ich %Vor% Dies könnte in etw...
04.12.2015, 13:30
1
Antwort

Beste Datenstruktur für ein unveränderliches persistentes 3D-Raster

Ich experimentiere mit dem Schreiben eines Spiels in einem funktionalen Programmierstil, was bedeutet, den Spielzustand mit einer rein funktionalen, unveränderlichen Datenstruktur darzustellen. Eine der wichtigsten Datenstrukturen wäre ein 3D...
25.09.2011, 05:18
3
Antworten

FP Alternative zum Polymorphismus in JavaScript / ReactJS

Ich arbeite gerade an einem ReactJS-Projekt, bei dem ich "wiederverwendbare" Komponenten erstellen muss, in denen einige der Methoden "überschrieben" werden müssen. In OOP würde ich Polymorphismus verwenden. Ich habe etwas gelesen und es scheint...
11.11.2017, 00:07
0
Antworten

Mehrdeutige Verwendung von Funktionen (Swift 4)

Ich habe versucht herauszufinden, warum der folgende Code mehrdeutig ist ... %Vor% ... wenn ich es mit zwei faulen Sequenzen und einem Aufruf von makeIterator BEISPIEL . %Vor% Dennoch hat der folgende Code diese Mehrdeutigkeit nich...
15.08.2017, 10:25
2
Antworten

Implementierung der topologischen Sortierung in Spark GraphX

Ich versuche topologische Sortierung mit Hilfe von sparks GraphX ​​ Bibliothek. Dies ist der Code, den ich bisher geschrieben habe: MyObject.scala %Vor% Resource.scala %Vor% Relation.scala %Vor% Ich erhalte den Fe...
18.10.2016, 13:11
0
Antworten

Wie extrahiere ich das zweite Element von Sigma am Konstrukt Kalkül?

Ich versuche das folgendermaßen zu tun: %Vor% Beachten Sie, dass der Wert, der von dieser Funktion zurückgegeben wird, von einem Wert innerhalb des Sigma selbst abhängt, ich diesen Wert extrahieren muss. Dieser Code überprüft nicht, weil ich...
13.05.2017, 20:15