Size: a a a

Scheme — русскоязычное сообщество

2021 November 18

X

XÆA-XII in Scheme — русскоязычное сообщество
Выучивших людей сойдут с ума
источник
2021 November 20

y

yosk in Scheme — русскоязычное сообщество
Есть вот такой пример кода:

(let lp ((i 1))
 (unless (= 10 i)
   (let loop ((k 1))
     (when (< k (sqrt i))
       (loop (1+ k))))
   (lp (1+ i))))

При попытке скомпилировать с использованием guild compile -O3 получаю такую ошибку:  https://0x0.st/-Rn1.txt
С опцией -O2 все нормально, если заменить 10 на число поменьше, то тоже все хорошо. Версия guile – 3.0.7.

Кто-то с гайлом может подтвердить, оно воспроизводится?
источник

AZ

Aydar Zarifullin in Scheme — русскоязычное сообщество
Вроде так, если без O запустить тоже ошибка.
источник

y

yosk in Scheme — русскоязычное сообщество
Сейчас посмотрел, да, -O2 работало с немного другим кодом. Надо было мне проверить перед отправкой.
источник

AP

Artyom "avp&quo... in Scheme — русскоязычное сообщество
Если кому интересно, завтра буду выступать на online-конференции с темой "Guile-SMC: Компилятор машин состояний для GNU Guile": https://docs.google.com/spreadsheets/d/1GmJBAAFG87ZIPMMdfYD54APV-B6WYAy9oFDtdWnoy9w/

Начало конференции будет в 17 часов по МСК, буду выступать третьим.  Запись скорее всего организуют в виде трансляции на YouTube.

Организатор: @awkravchuk в чате @lisp_forever
источник

AZ

Aydar Zarifullin in Scheme — русскоязычное сообщество
Есть такой код

(define cflags '())

(append! cflags '("-DBUILD_SERVER=1"))
(append! cflags '("-DBUILD_CLIENT=1"))

(display cflags)

cflags после выполнения пуст, в документации написано " append! is permitted, but not required, to modify the given lists to form its return. " причина в этом? или я как-то не так юзаю append! ? Как сделать 100% деструктивный append? В виде макроса который будет изменять существующий биндинг?
источник

A ß in Scheme — русскоязычное сообщество
(set! cflags (append! cflags '(...)))
источник

AZ

Aydar Zarifullin in Scheme — русскоязычное сообщество
Я примерно про такое и говорю
источник

A ß in Scheme — русскоязычное сообщество
ну да
источник

AZ

Aydar Zarifullin in Scheme — русскоязычное сообщество
Вроде понял.
источник

NV

Nikita Vorontsov in Scheme — русскоязычное сообщество
народ, кто-нибудь шарит в c++? Как преобразовать shared_prt в обычный указатель, а то ловлю двойное освобождение
источник

AZ

Aydar Zarifullin in Scheme — русскоязычное сообщество
Лучше в @supapro стучись, но я не совсем понимаю как двойное освобождение связано с типом указателя
источник

ND

Nikita Domnickij in Scheme — русскоязычное сообщество
а в чем прекол append! и компании если все равно нужен set!
источник

A ß in Scheme — русскоязычное сообщество
мутирующий append! может быть быстрее и эффективнее немутирующего append
источник

y

yosk in Scheme — русскоязычное сообщество
Иногда он все-таки мутирует сам список:

scheme@(guile-user)> (define l1 '(1 2 3))
scheme@(guile-user)> (define l2 '(4 5 6))
scheme@(guile-user)> (append! l1 l2)
$2 = (1 2 3 4 5 6)
scheme@(guile-user)> l1
$3 = (1 2 3 4 5 6)
scheme@(guile-user)> l2
$4 = (4 5 6)
scheme@(guile-user)>
источник

A ß in Scheme — русскоязычное сообщество
а теперь сравни l2 и (nthcdr 3 l1)
источник

y

yosk in Scheme — русскоязычное сообщество
Ну, (cdddr l1) равен l2, или что-то другое подразумевалось?
источник

A ß in Scheme — русскоязычное сообщество
не просто равен, а один и тот же объект
источник

AZ

Aydar Zarifullin in Scheme — русскоязычное сообщество
Все равно не полностью понимаю как append! работает, Склеилось два несвязанных между собой списка, очевидно что это я их как-то косвенно склеил но пока не получается сделать минимальный пример  проблемы.
источник

A ß in Scheme — русскоязычное сообщество
The cdr field of each list's final pair is changed to point to the head of the next list, so no consing is performed.  Return the mutated list.
источник