Добавлю к уже сказанному другими о множественных значениях.
Множественные результаты имеются в Scheme и с ними работается сравнительно удобно. Например, одна и та же функция может возвращать разное количество результатов в разных случаях. Функция ниже находит корни квадратного уравнения, реальные или комплексные, и возвращает их как два значения. Но если они совпадают, возвращается единственное значение.O`` (define [roots a b c] (let ([d (sqrt (- (* b b) (* 4 a c)))] [a2 (* 2 a)]) (if (= 0 d) (- (/ b a2)) (values (/ (- (+ b d)) a2) (/ (- d b) a2))))) (roots 1 -3 2) ; получаем два значения: 1 и 2 (roots 1 6 9) ; получаем значение –3 Множественное присваивание и множественные результаты имеются в языке CLU (середины 70-х) — он более-менее забыт, но дал начало многим конструкциям в современных ЯП. В CLU, например, имеется цикл вида for x,y,z in итератор(аргументы) do тело-цикла где итератор — ограниченного вида сопрограмма, возвращающая некоторое количество значений, которыми питается цикл. Язык Lua также отлично поддерживает множественное присваивание, множественные результаты и циклы как выше у CLU, только с бо́льшими возможностями. (Вообще, в этом языке — удивительно богатый набор возможностей в микроскопическом объёме реализации. Настоящая жемчужина!) On Mon, 2 Dec 2019 at 18:29, Sergei M. Abramov abram_AT_botik.ru <refal@botik.ru> wrote: > > > Так что Рефал Плюс — не единственный язык с коарность, или слово > > «коарность» я понял не так. > > Понял так, как надо. > > > В языке Go функции тоже могут возвращать несколько значений: > > https://ru.wikipedia.org/wiki/Go#Функции_могут_возвращать_несколько_значений > > Не знал, Да, сделано "как надо". > > > В Common Lisp’е функции могут возвращать несколько значений (и это не > > возврат списка): > > http://lisper.ru/pcl/the-special-operators#Множественные значения > > Да, тоже не знал. Но, конечно, наворочено... > > > Языки, которые поддерживают кортежи, не считаются. Ну можно вернуть > > кортеж из нескольких значений, но это всё равно будет возврат одного > > значения — кортежа, а не нескольких. > > В точку. Можно эмулировть коарность (коместность) через картежи, > списки, записи и другие подобные механизмы. Например, Haskell: > splitAt, divMod и т.д... > > А разница между эмуляцией и истинной коарностью в одном: при эмуляции > два результата (несколько) конструктором упаковываются в одну > стриктуру чтобы через мгновение разламывать эту структуру в точке > приема на составные части (селекторы). > > Истинная коарность экономит на конструкторе и селекторах. > > Всего доброго, > > Сергей Абрамов >