Wie m0nhawk in den Kommentaren schreibt, kann man nicht direkt eine Haskell Liste der beiden Listen von ganzen Zahlen und ganze Zahlen haben. Es gibt jedoch mehrere Alternativen.
Eine Alternative ist in der Tat eine Liste von Listen von ganzen Zahlen zu verwenden ([[1, 2, 3], [4], [5], [6]]
), wie folgt aus:
combine:: [Int] -> [Int] -> [[Int]]
combine xs ys = [xs] ++ [[y] | y <- ys]
main = do
putStrLn $ show $ combine [1, 2, 3] [4, 5, 6]
(läuft dies in der Tat [[1, 2, 3], [4], [5], [6]]
druckt).
Eine weitere Alternative ist die Verwendung algebraic data types:
Prelude> data ScalarOrList = Scalar Int | List [Int] deriving(Show)
Prelude> [List [1, 2, 3], Scalar 4, Scalar 5, Scalar 6]
[List [1,2,3],Scalar 4,Scalar 5,Scalar 6]
Sie nicht die folgende Liste haben: '[[1,2,3], 4, 5, 6]'. Nur das: "[[1,2,3], [4], [5], [6]]". Sie können stattdessen ein Tupel machen. – m0nhawk
Um eine hinzuzufügen, was m0nhawk sagte, der Grund, warum Sie dies nicht tun können, ist, weil in Haskell-Listen homogen sind. Dies bedeutet, dass jedes Element der Liste den gleichen Typ haben muss. So können Sie eine Liste von Listen haben. Aber Sie können keine Liste haben, die sowohl Listen als auch Nummern enthält. Dies ist ein XY-Problem, Sie denken, Sie brauchen diese Datenstruktur, aber Sie nicht. Welches Problem lösen Sie eigentlich? – Keatinge