-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Что делать с жунами

Вторник, 20 Апреля 2021 г. 23:29 + в цитатник
korvin:
Цитата applegame @
Любая операция добавления/изменения кортежа в эрланге приводят к созданию полной копии, и это совершенно не мешает быть кортежам иммутабельными.

При чём тут кортежи? Если ты используешь кортежи вместо массивов/списков, то ты используешь их неправильно.

Цитата applegame @
Ленивость - это вообще ортогональное явление. Сами списки не могут быть ленивыми - это бессмыслица. Ленивыми могут быть операции над самими списками или их элементами


    ll = [ print 1 , print 2 , print 3 ]

Какие операции тут ленивые?

https://ideone.com/L5Toq1

Ленивые списки на Scheme

    (define-syntax lazy-cons
    (syntax-rules ()
    ((_ head tail) (cons (delay head) (delay tail)))))
    (define (lazy-head ll)
    (force (car ll)))
    (define (lazy-tail ll)
    (force (cdr ll)))
    (define-syntax lazy-list
    (syntax-rules ()
    ((_ x) (lazy-cons x '()))
    ((_ x . xs) (lazy-cons x (lazy-list . xs)))))
    ;;; ----------------------------------------------------------------
    (define ll (lazy-list (print 1) (print 2) (print 3)))
    (lazy-head (lazy-tail ll))


https://ideone.com/BexV68


и на Java. Синтаксического сахара только не хватает

    import java.util.function.Supplier;
    /* Name of the class has to be "Main" only if the class is public. */
    class Ideone {
    public static void main (String[] args) throws java.lang.Exception {
    var ll = Lazy.list( () -> print(1), () -> print(2), () -> print(3) );
    ll.tail().head();
    }
    private static Unit print(Object o) {
    System.out.println(o);
    return Unit.UNIT;
    }
    }
    final class Lazy {
    public static Promise delay(Supplier expr) {
    return new Promise<>(expr);
    }
    public static List cons(Supplier headExpr, Supplier> tailExpr) {
    return new List<>(new Promise<>(headExpr), new Promise<>(tailExpr));
    }
    public static List nil() {
    @SuppressWarnings("unchecked")
    var nil = (List) List.NIL;
    return nil;
    }
    @SafeVarargs
    public static List list(Supplier... values) {
    if (values == null || values.length == 0) {
    return nil();
    }
    return list(values, 0);
    }
    private static List list(Supplier[] values, int headCursor) {
    if (headCursor == values.length) {
    return nil();
    }
    return new List<>(new Promise<>(values[headCursor]), new Promise<>(() -> list(values, headCursor+1)));
    }
    private Lazy() {
    throw new UnsupportedOperationException("utility class");
    }
    }
    final class List {
    static final List

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846586

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку