Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
1

Как перевести список в кортеж?

05.08.2014, 17:54. Показов 2423. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Например [0..5] -> (0,1,2,3,4,5)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2014, 17:54
Ответы с готовыми решениями:

Как вывести кортеж целиком и как распаковать кортеж в переменные?
Как вывести кортеж целиком и как распаковать кортеж в переменные?

Создать кортеж и распаковать кортеж в несколько переменных
Создать кортеж и распаковать кортеж в несколько переменных

Функция, принимает на вход список и возвращающая кортеж
Написать функцию posneg(lst), принимающую на вход список lst, состоящую из чисел, и возвращающую...

Кортеж как аргумент
Всем привет! Читаю сейчас книжку "A Byte of Python", пишут что в нем есть возможность передавать...

11
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,589
05.08.2014, 18:39 2
В общем случае никак, насколько я знаю. Да и зачем? Конкретно в твоем примере будет

C#
1
2
3
4
5
6
7
open System
 
let tuple6 (xs: 'a list) =
    match xs with
    | [a;b;c;d;e;f] -> (a, b, c, d, e, f)
 
tuple6 [0..5] |> printfn "%A"
1
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
05.08.2014, 19:01  [ТС] 3
Цитата Сообщение от korvin_ Посмотреть сообщение
Конкретно в твоем примере будет
Это я знаю. Мне функцию перевести let wert n = [0..n]
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,589
05.08.2014, 19:24 4
Цитата Сообщение от oolegg Посмотреть сообщение
Мне функцию перевести let wert n = [0..n]
Тогда никак, размер кортежа -- это часть его типа, а в F# зависимых типов вроде нет.
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
05.08.2014, 19:55 5
через рефлекшн можно сделать. но это очень плохая идея. сначала скажите для чего это может понадобиться
1
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
05.08.2014, 20:07  [ТС] 6
Цитата Сообщение от pycture Посмотреть сообщение
сначала скажите для чего это может понадобиться
Это не то что вы подумали.Просто понадобилась такая запись через запитые.Потом покажу.
Цитата Сообщение от pycture Посмотреть сообщение
через рефлекшн можно сделать
можете показать.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
05.08.2014, 20:09 7
Цитата Сообщение от oolegg Посмотреть сообщение
Это не то что вы подумали
да я вообще ни о чем не думаю
http://stackoverflow.com/quest... nd-f-tuple
1
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
06.08.2014, 07:13  [ТС] 8
Цитата Сообщение от pycture Посмотреть сообщение
http://stackoverflow.com/questions/2...st-and-f-tuple
Например код.
Код
let listToTuple l =
    let l' = List.toArray l
    let types = l' |> Array.map (fun o -> o.GetType())
    let tupleType = Microsoft.FSharp.Reflection.FSharpType.MakeTupleType types
    Microsoft.FSharp.Reflection.FSharpValue.MakeTuple (l' , tupleType)
При добавлении [0..5] пишет тип int не совпадает с типом obj
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
06.08.2014, 07:30 9
Цитата Сообщение от oolegg Посмотреть сообщение
При добавлении [0..5] пишет тип int не совпадает с типом obj
ну так
Код
val listToTuple : l:obj list -> obj
чего ж вы ожидаете? боксить надо
Код
> [0..4] |> List.map box |> listToTuple;;
val it : obj = (0, 1, 2, 3, 4)
1
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
06.08.2014, 08:03  [ТС] 10
Цитата Сообщение от pycture Посмотреть сообщение
сначала скажите для чего это может понадобиться
Вод код на WPF
Код
open System
open System.Windows
open System.Windows.Controls
//====================================================================================================
let Sum(n : int, m : int, k : int, d : int) = 
    let rnd = System.Random()
    let x1 = Array2D.init n m (fun i j -> rnd.Next(10))
    let x2 = Array2D.init m k (fun i j -> rnd.Next(10))
    // Умножение матриц
    let x3 = Array2D.init n k (fun i j -> Array.sum (Array.init m (fun s -> x1.[i,s] * x2.[s,j])))
    if   d < 0 then x1
    elif d = 0 then x2
    else x3
//====================================================================================================
let listToTuple l =
    let l' = List.toArray l
    let types = l' |> Array.map (fun o -> o.GetType())
    let tupleType = Microsoft.FSharp.Reflection.FSharpType.MakeTupleType types
    Microsoft.FSharp.Reflection.FSharpValue.MakeTuple (l', tupleType)
//================================================================
let app = Application()
let w =new Window(Height = 700.0, Width = 640.0)
let Panel = StackPanel()
//================================================================
let DataGrid1 = DataGrid(Height = 200.0, Width = 550.0)
DataGrid1.Margin <- Thickness(0.0,5.0,0.0,0.0)
DataGrid1.AutoGenerateColumns <- true 
let DataGrid2 = DataGrid(Height = 200.0, Width = 550.0)
DataGrid2.Margin <- Thickness(0.0,5.0,0.0,0.0)
DataGrid2.AutoGenerateColumns <- true
let DataGrid3 = DataGrid(Height = 200.0, Width = 550.0)
DataGrid3.Margin <- Thickness(0.0,5.0,0.0,0.0)
DataGrid3.AutoGenerateColumns <- true
//================================================================
let Label1 = Label(Width=30.0)
Label1.Margin <- Thickness(-600.0,-30.0,0.0,0.0)
Label1.Content <- "N="
let Label2 = Label(Width=30.0)
Label2.Margin <- Thickness(-400.0,-30.0,0.0,0.0)
Label2.Content <- "M="
let Label3 = Label(Width=30.0)
Label3.Margin <- Thickness(-200.0,-30.0,0.0,0.0)
Label3.Content <- "K="
//================================================================
let Text1 = TextBox(Width = 60.0)
Text1.Margin <- Thickness(-500.0,-30.0,0.0,0.0)
let Text2 = TextBox(Width = 60.0)
Text2.Margin <- Thickness(-300.0,-30.0,0.0,0.0)
let Text3 = TextBox(Width = 60.0)
Text3.Margin <- Thickness(-100.0,-30.0,0.0,0.0)
//================================================================ 
let But1 = Button(Width = 60.0)
But1.Margin <- Thickness(100.0,5.0,0.0,0.0)
But1.Content <- "Вычислить"
//================================================================
But1.Click.Add(fun _ ->  
let t1 = int(Text1.Text)
let t2 = int(Text2.Text)
let t3 = int(Text3.Text)
let q1 = Sum(t1, t2, t3,  1)
let q2 = Sum(t1, t2, t3, -1)
let q3 = Sum(t1, t2, t3,  0)
DataGrid1.ItemsSource <- [for i in 0..t1-1 -> [for j in 0..t2-1-> q2.[i,j] ]|> List.map box |> listToTuple]
DataGrid2.ItemsSource <- [for i in 0..t2-1 -> [for j in 0..t3-1-> q3.[i,j] ]|> List.map box |> listToTuple]
DataGrid3.ItemsSource <- [for i in 0..t1-1 -> [for j in 0..t3-1-> q1.[i,j] ]|> List.map box |> listToTuple]) 
//================================================================
Panel.Children.Add But1      |> ignore
Panel.Children.Add Text1     |> ignore
Panel.Children.Add Text2     |> ignore
Panel.Children.Add Text3     |> ignore
Panel.Children.Add Label1    |> ignore
Panel.Children.Add Label2    |> ignore
Panel.Children.Add Label3    |> ignore
Panel.Children.Add DataGrid1 |> ignore
Panel.Children.Add DataGrid2 |> ignore
Panel.Children.Add DataGrid3 |> ignore
//================================================================
w.Content <- Panel
[<STAThread>]
do app.Run(w) |> ignore
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
06.08.2014, 09:05 11
Цитата Сообщение от oolegg Посмотреть сообщение
Вод код на WPF
странная конструкция.
WPF появился раньше чем .Net4.
туплы появились только в .Net4
значит WPF в состоянии работать без туплов.
вероятно вы делаете чтото не так
1
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
06.08.2014, 11:21  [ТС] 12
Цитата Сообщение от pycture Посмотреть сообщение
значит WPF в состоянии работать без туплов.
вероятно вы делаете что то не так
Это чисто случайно вышло.А как сделать также как и в С# пока что не знаю.
0
06.08.2014, 11:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2014, 11:21
Помогаю со студенческими работами здесь

Как распаковать кортеж?
При попытке распаковать кортеж из аргументов (*args), в PyCharm постоянно получаю: ValueError:...

Как перебирать кортеж
Нужно составит программу которая брала бы слово с кортежа перемешивала буквы в слове и предлагала...

Как деконструировать кортеж в переменные?
Как деконструировать кортеж в переменные в C++? В C# можно сделать так: (x, y) = (y, x); ,...

Кортеж с абстрактным типом как параметр шаблона + smart_ptr
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru