Это довольно сумасшедший письменный код. Давайте попробуем разрешить это по частям.
Прежде всего, t1
является кортежем типа (a,b,c)
. Давайте напишем t1 = (x,y,z)
и попробуем разобраться. Довольно ясно, что a
- String
, а x
- "p1"
.
Вторым компонентом является ((take 2) . tail) mnr
, то есть take 2 [1,2,3,4,5,6]
, то есть [1,2]
. Таким образом, b
- [Int]
, и y
- [1,2]
. Имеет смысл.
Третий компонент странно написан. Прежде всего,
let no n = name in no
просто определяет функцию \n -> name
, т.е. постоянной функции, возвращающей name
. Это более красиво написано как const name
. Итак, у вас есть состав (take 3) . words . (const name)
, и вы применяете его к "No"
. Ну, (const name) "No"
- это, очевидно, name
, то есть "Max Mustermann"
. Таким образом, words
применяется к ["Max", "Mustermann"]
, а затем take 3
доставит вам первые три элемента, что опять ["Max", "Mustermann"]
. Это z
выше, и показывает, что c
- [String]
.
Всего в итоге вы получите t1
, имеющий тип (String, [Int], [String])
и значение ("p1", [1,2], ["Max", "Mustermann"])
.
Код для третьего компонента должны быть очищены, но, как вы чистите его зависит от того, что вы действительно хотите делать дальше. Однако, поскольку он стоит сейчас, он очень запутан и просто путает вас и других.
Блестящий !!! +1 – Ingo
спасибо этот пример из экзамена – sherif
Тот, кто поставил этот экзамен, довольно садистский. –