2017-05-03 4 views
0

Bei Stringlisten [a, b, c] und [d, e] zum BeispielOCaml - fügen Sie alle Elemente einer Liste auf alle Elemente einer anderen Liste

Rückkehr der Liste [ad, bd, CD, ae, sei, ce].

Bitte geben Sie mir keine Antwort, nur ein Punkt die richtige Richtung für einen neuen Lernenden.

+0

Bitte lesen Sie: https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions und versuchen Sie, die Art und Weise zu ändern, wie Sie Fragen stellen. Sie geben uns nicht die geringste Mühe, uns zu zeigen, dass Sie überhaupt über das Problem nachgedacht haben. – Lhooq

+0

Sie möchten das kartesische Produkt von 2 Listen berechnen und dann jedes Paar Elemente auf etwas anderes abbilden. –

Antwort

2

Dieses Problem ist schwierig, weil Sie zwei Listen durchlaufen müssen. Wenn Sie es als eine Funktion schreiben, müssen Sie zwei Rekursionen verfolgen.

Ein Weg, um es zu nähern, ist mit einem einfacheren Problem zu beginnen. Angenommen, Sie haben eine Liste von Strings l und eine Zeichenfolge s. Können Sie eine Funktion schreiben, die eine neue Liste mit s an die einzelnen Zeichenfolgen in l erstellt?

Es gibt eine einfache Lösung für dieses einfachere Problem mit List.map. Oder Sie können eine explizit rekursive Funktion schreiben.

Danach haben Sie nur eine verbleibende Rekursion, um herauszufinden, was einfacher sein kann.

aktualisieren

Jetzt haben Sie Ihre Funktion, die Sie einfach eine Funktion, die eine Zeichenfolge an alle Elemente der ersten Liste von Strings anhängt schreiben kann. Das Layout würde wie folgt aussehen:

let cross_concat list1 list2 = 
    let concat_string_to_list1 s = concat_string_to_list list1 s in 
    ... 

Mit dieser Definition Sie List.map wieder verwenden können, die endgültigen Ergebnisse zu bekommen (müssen die resultierenden Listen von Zeichenketten in einer Liste verketten). Oder Sie können List.fold_right verwenden, um das Ergebnis aufzubauen, während Sie gehen. Oder Sie können Ihre eigene rekursive Funktion schreiben.

Wenn Sie nicht zu viele rekursive Funktionen geschrieben haben, wäre dies etwas zum Durchdenken.

+0

Danke. Ich habe eine Funktion für den ersten Teil erstellt (eine Zeichenfolge an jedes Element einer Liste angehängt): 'concat_string_to_list lst str = List.map lassen (fun x -> x^str) lst' aber ich lch bin ehrlich, ich bin ratlos, wie ich die nächste Ebene tiefer gehen und jedes Element in dieser Liste an jeden der anderen anhängen werde. –

+0

Ich werde meine Antwort aktualisieren ... –

Verwandte Themen