LINUX.ORG.RU

Скриптовый функциональный язык (с иммутабельностью)

 , ,


0

3

Собственно сабж. Пых, руби или пайтон - императивщина, хоть и с элементами. А было бы очень неплохо всякие вебоподелки делать на языке, в котором была иммутабельность из коробки, if был бы выражением, удобная трансформация списков и т.д. Может есть какой «молодой и динамично развивающийся» и без привязки к JVM/Mono/...?

★★★
Ответ на: комментарий от Debasher

У тебя с логикой проблемы. 2 разных выражения возвращают 2 значения разных типов что в одном, что в другом коде, только у тебя, почему то «ошибка типов» только в первом вылезла.

nuboquest
()
Ответ на: комментарий от nuboquest

Ересь несёшь какую-то

if(true, 1, 2)

Результат очевидно будет number-типа, потому что выражение 1 и выражение 2 number-типа

if(false, false, true)

Тут тоже, и false и true это булы.

Всё логично

if(true, 1) должна возвращать либо nil-подобный тип, либо херню которая потребует обработки различных ситуаций (см. монады), иначе это ошибка

Debasher ★★★★★
()
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от nuboquest

Тебе не понять, видимо.

Конечно не понять, я же не вижу то чего нет :-D

Debasher ★★★★★
()
Ответ на: комментарий от nuboquest

правильно посаны говорили, что хаскель головного мозга неизлечим.

И правильно говорили

Debasher ★★★★★
()
Ответ на: комментарий от nuboquest

В случае использования нормального языка.

приведи пожалуйста пример! Не языка, а этого случая

Debasher ★★★★★
()
Ответ на: комментарий от anonymous

Поясню сразу: я имею в виду если есть инстанс Cat и Dog, и они оба удовлетворяют Animal, то можно сказать что они оба типа Animal

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Дурачка включил? Полиморфизм позволяет использовать один и тот же интерфейс с разными типами.

anonymous
()
Ответ на: комментарий от Debasher

Забудь об интерфейсе. Тип — это ярлык, который мы вешаем на значение. Пресловутый «интерфейс» уже следует из того, на какие значения какие ярлыки мы навесили.

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Забудь об интерфейсе

Хорошо, я забуду всё что знал раньше чтобы понять когда 1 и 2 будут разных типов. Что дальше?

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Тип это множество хреновин с одинковым интерфейсом

Странное определение. Кое-где есть тип (or null integer), например. И 1, и nil - значения этого типа. Вообще, тупой спор, как и про то, что then и else в if должны возвращать значение одного типа. Зачем это? Только потому, что так в хаскелле?

anonymous
()
Ответ на: комментарий от buddhist

есть тип (or null integer), например. И 1, и nil - значения этого типа.

Это понятно. Я про другое: когда они разные?

тупой спор, как и про то, что then и else в if должны возвращать значение одного типа. Зачем это? Только потому, что так в хаскелле?

только чтобы потроллить анонiмуса

Debasher ★★★★★
()
Ответ на: комментарий от buddhist

Тип — это ярлык, который мы вешаем на значение.

Речь об этом? Т.е. типа мы можем повесить на 1 ярлык «один», а на 2 «два»? Но чото херня получается, ярлык number ведь мы не убираем? Или..? А где вообще такое практикуется?

Debasher ★★★★★
()

CoffeeScript с immutable-js (иммутабельные коллекции)?

holuiitipun
()
Ответ на: комментарий от Debasher

Мы можем «number» либо вешать, либо не вешать. Другое дело, что на практике это не будет иметь смысла, и обычно значения разных типов 1 и 2 относятся к множеству других типов, в том числе number.

Подобная система типов не в ООП есть, к примеру в Typed Racket. Там числа 0 и 1 относятся к типам 0 и 1, а дальше по иерархии от Positive Integer до Any.

http://docs.racket-lang.org/ts-reference/type-ref.html

В математике тип представляет собой именно такую конструкцию.

В Racket также можно обратить внимание на Occurence Typing.

buddhist ★★★★★
()
Последнее исправление: buddhist (всего исправлений: 3)

Rust, очевидно же.

иммутабельность из коробки

Check.

if был бы выражением

Check.

удобная трансформация списков

Check.

молодой и динамично развивающийся

Check.

без привязки к JVM/Mono/...

Check.

Еще с производительностью приближающейся к C++ и без GC. Начинай уже мониторить http://arewewebyet.com/ , авось через год можно будет вебподелки писать.

anonymous
()
Ответ на: комментарий от anonymous

Rust няша, но он не скриптовый (отдельная тема для холивара, что такое скриптовый) и да, пока сырой. Все мониторится.

h8 ★★★
() автор топика
Последнее исправление: h8 (всего исправлений: 1)
Ответ на: комментарий от Debasher

Это понятно. Я про другое: когда они разные?

Когда (eql 1) и (eql 2), например. Или (member 1 3 5) и (member 2 4)

anonymous
()
Ответ на: комментарий от anonymous

С++, очевидно же.

иммутабельность из коробки

const

if был бы выражением

a ? b : c;

удобная трансформация списков

cpplinq

молодой и динамично развивающийся

С++14 полгода назад вышел

без привязки к JVM/Mono/...

Check.

Еще с производительностью приближающейся к C и без GC. Начинай уже мониторить http://cppcms.com и http://www.webtoolkit.eu и писать веб-поделки.

anonymous
()
Ответ на: комментарий от anonymous

#include "cpplinq.hpp"

int computes_a_sum ()
{
    using namespace cpplinq;
    int ints[] = {3,1,4,1,5,9,2,6,5,4};

    auto result =    from_array (ints)
                  >> where ([](int i) {return i%2 ==0;})  // Keep only even numbers
                  >> sum ()                               // Sum remaining numbers
                  ;
    return result;
}

лёл

anonymous
()
Ответ на: комментарий от anonymous

А что это даст? можно использовать тернарный оператор.

Если if является выражением, то тернарный оператор не нужен. Ну и if читабельнее, если условие не элементарное. Да и обычно, это идёт вместе с "(почти) всё - выражение".

Вот если бы if был функцией, тогда да, профит.

Какой?

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

a ? b : c;

А теперь то же самое, но не для примитивных b и c.

И для обработки исключений тоже какой-то «тернарный оператор» вместо try/catch (или что там в плюсах).

h8 ★★★
() автор топика
Ответ на: комментарий от h8

И для обработки исключений тоже какой-то «тернарный оператор» вместо try/catch (или что там в плюсах).

Ну в расте исключений вообще нет, так что не с чем сравнивать. Или ты о чём?

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.