Назначение нескольких переменных на Haskell
только начало работы в Haskell, и я пытаюсь найти лучший способ назначить несколько переменных на основе одного условия. До сих пор я только собирал и распаковывал кортежи. Есть ли лучший / более идиоматический способ?
(var1, var2, var3) =
if foo > 0
then ("Foo", "Bar", 3)
else ("Bar", "Baz", 1)
также любопытно о стоимости упаковки и распаковки кортежей. Если я читаю этой правильно, похоже, что это оптимизируется в функциях, но не уверен, что это так с назначением.
1 ответов
Да, это прекрасно. Если вы компилируете с включенной оптимизацией, кортежи действительно будут "распакованы", поэтому они не несут никаких дополнительных затрат. Код будет преобразован во что-то вроде этого:
(# var1, var2, var3 #) =
case foo > 0 of
False -> (# "Bar", "Baz", 1 #)
True -> (# "Foo", "Bar", 3 #)
распакованный 3-Кортеж на самом деле всего три значения-он не имеет какой-либо дополнительной структуры. В результате он не может быть сохранен в структуре данных, но это нормально. Конечно, если foo
известно во время компиляции,case
будет оптимизировано прочь тоже, и вы просто получите три определения.