Scheme Community
[Most Recent Entries]
[Calendar View]
[Friends]
Below are the 20 most recent journal entries recorded in
Russian Scheme Language Community's LiveJournal:
[ << Previous 20 ]
| Wednesday, July 8th, 2009 | 3:55 pm [smalgin] |
PLTScheme - (current-milliseconds)
Простой вопрос, наверное. есть такая процедура в MIT Scheme , называется (runtime). Типичное использование (display (- (runtime) start-time)) Я у себя держу PLT Scheme, там этой штуки нет. Зато есть (current-milliseconds) Фишка в том, что (display (- (current-milliseconds) start-time)) внутри моего кода всегда выдает 0. Иногда почему-то 16. В чем грабли, об которые я уже полдня натыкаюсь? под катом код (упражнение 1.20 из SICP) | 8:46 pm [tentaclius]
 |
Изменение пространства имен символа
Доброго времени суток. Долго шарил по разным учебникам в поисках ответа на такой вопрос. Увы пока безуспешно. Подскажите пожалуйста, кто сталкивался с подобным... Вот пример кода:
(define (some-function a-symbol)
(define z 11)
(eval a-symbol))
(some-function 'z)
Естественно, в данном случае интерпретатор отрапортует об ошибке, поскольку с символом z, передаваемым в some-function не связанно значение. Вопрос в следующем: как мне сделать именно так как хочется :), тоесть, чтобы внутри функции передаваемый символ связать с новым пространством имен. В plt-scheme достаточно много различных функций по работе с пространствами имен. Можно их создавать, выбирать и т.д. Самым, кажется, связанным с данной темой является следующий пример:
(let ((ns (make-base-namespace)))
(parameterize ((current-namespace ns))
(define z 11)
(eval '(define z 14) ns)
(display z)
(newline)
(display (eval 'z)))))
но тут я наталкиваюсь на другую проблему: получается что (define z 11) и (eval '(define z 14)) действуют в различных областях имен. Т.е., как я понимаю (parameterize ((current-namespace ns)) ...) действует только для оператора (eval ...) ? Но мне хотелось бы именно совместить определенный символ в текущем контексте (при помощи (define ...)) с передаваемым в качестве аргумента функции символом. Подскажите пожалуйста как можно (и можно ли) подобного достичь? Спасибо заранее. | | Wednesday, June 17th, 2009 | 1:34 am [arhirat] |
Обратные функции
Я в свободное время люблю пофантазировать на тему языков программирования, различных парадигм в программировании и всяких фишек, которые могли быть полезны. Например сегодня я хотел бы немного порассуждать на тему функций и передачи данных в них. Ведь что такое функция? Это некоторый черный ящик, в который мы подаем данные, а на выходе получаем результат.  В качестве входных данных могут быть переменные, а так же результат выполнения других функций. В результате у нас получается дерево, при чем данные передаются всегда от вершины дерева к корню (слева на право).  В данном примере мы вычисляем логическое значение, является ли Y суммой X и 5. А теперь вопрос на засыпку, а кто сказал, что данные должны обязательно передаваться от вершин к корню? Почему бы нам не поменять направление в некоторых ветвях, например так.  Присвоить Y значение, равное сумме X и 5. Или еще лучше вот так.  Присвоить X такое значение, чтобы его сумма с 5 равнялась Y. Во всех языках программирования операция присвоения нового значения переменной и операция логического сравнения - это две совершенно разные операции. Обычно обозначаются либо разными символами (в C++ это = и ==), либо разными функциями. Хотя по сути это одно и то же! Мы просто в одном случае спрашиваем, а равны ли X и Y, а в другом случае утверждаем что X равен Y. Т.е. логически это одна и та же операция, только направление движения данных отличается. Конечно, далеко не все функции обратимы как операция сложения, но все-таки это было бы очень удобно. Например операция andmap и map в каком-то смысле одинаковые, только опять же данные движутся в другом направлении. В одном случае мы спрашиваем, а будет ли истиной какое-то выражение для всех значений списка, а в другом случае мы утверждаем, что некоторое выражение является истиной для всех значений списка. А если взять и абстрагироваться от конкретных направлений, а просто взять и объявить некоторую формулу, например "X+5=Y". Вот имеется такая взаимосвязь переменных. А потом эту формулу использовать по своему усмотрению, в одном случае мы присваиваем Y значение суммы, в другом случае мы присваиваем X нужное значение, а в третьем мы просто хотим проверить истинно ли данное выражение. Короче, я от слов к делу. Я немного поэкспериментировал на эту тему и вот что получилось. #lang scheme (define (sv! f v) (keyword-apply f '(#:value) (list v) '())) (define (gv? f) (apply f '())) (define-syntax-rule (g? x) (lambda () x)) (define-syntax-rule (s! x) (lambda (#:value value) (set! x value))) (define-syntax-rule (defun fun x y value getter setter) (define (fun x y) (lambda (#:value (value 'novalue)) (if (eq? value 'novalue) getter setter)))) (defun summ x y value (+ (gv? x) (gv? y)) (sv! x (- value (gv? y)))) (defun eqv x y value (= (gv? x) (gv? y)) (if (eq? value #t) (sv! x (gv? y)) #f)) (define x 56) (define (formula x y z) (eqv (summ x y) z)) ;запоминаем формулу x+y=z (sv! (eqv (summ (s! x) (g? 5)) (g? 9)) #t) ;вычислить x такое, чтобы x+5=9 x ;возвращает 4 (sv! (formula (s! x) (g? 3) (g? 10)) #t) ;вычислить то же самое с использованием формулы x ;возвращает 7 (gv? (formula (g? x) (g? 5) (g? 12))) ;вычислить логичекое выражение x+5=12 ;возвращает ИСТИНУ Кстати, у нас получилась определенная ленивость. Например выражение (sv! (eqv (summ (s! x) (g? 5)) (g? 9)) #f) не будет изменять значение x, т.к. мы передаем #f. По-моему идея, запихнуть результат обратно функции в ж..., довольно интересна и стоит размышлений :) | | Sunday, May 10th, 2009 | 12:06 pm [dtnoizr]
 |
как насчёт того, чтобы писать Flash анимацию прямо внутри PLT Scheme? если ли кто заинтересованный в этом деле? | | Sunday, April 26th, 2009 | 9:24 am [dtnoizr]
 |
работаю в PLT Scheme с sandbox-ами надо сделать, чтобы можно было многократно прерывать работу sandbox-а, передавая наружу некое сообщение, которое бы обрабатывалось и закидывало некое сообщение обратно вовнутрь sandbox-а. я пробовал с помощью обработки ошибок (вызывал raise) и "продолжений", но делать это многократно (больше одного раза) не получается - продолжения перестают работать как такое сделать? | | Wednesday, April 22nd, 2009 | 2:32 pm [begemotv2718]
 |
define_syntax
Недавно начал изучать SICP, не бейте слишком строго. Хотелось бы понять почему в SICP авторам как-то удачно удается обходится без define-syntax и явно определенных force и delay? В R5RS это не работает, собственно, натолкнулся на это, когда пытался сделать бесконечные потоки (streams) по методе, описанной в SICP. (define (cons-stream a b) (cons a (delay b))) (define (integers-from n) (cons-stream n (integers-from (+ n 1))) (define natural-numbers (integers-from 1)) в R5RS немедленно заходит в бесконечный цикл. На самом деле надо писать (define-syntax cons-stream (syntax () (cons-stream a b) (cons a (delay b)))). Это что-то, похоже, связаное с порядком вычисления. В идеале бы хотелось еще понять, зачем было это изменение ;). | | Saturday, March 28th, 2009 | 1:03 am [wallenokk] |
| | Tuesday, December 9th, 2008 | 1:57 pm [yushi]
 |
GNU Guile [solved]
А есть здесь люди с опытом использования libguile? Что-то я пока не понимаю даже, как выполнить произвольный схемный код. Проблема: вызов scm_c_eval_string роняет программу вместе с интерпретатором Схемы в случае ошибки, а scm_catch как-то довольно безумно работает, я не понимаю, что ему передавать в качестве второго аргумента. Или в случае scm_c_eval_string ошибки надо перехватывать другим способом? Или вместо scm_c_eval_string надо пользоваться чем-то ещё? Guile 1.8.4. The Guile Reference Manual читал, примеры гуглил. Всё равно ничего не понимаю. UPD Проблема решена использованием scm_internal_catch, tnx2 airat. | | Thursday, November 13th, 2008 | 8:50 pm [potan] |
Хвостовая рекурсия.
Будут ли хвостовой рекурсия в случаях:
(defun (xxx ...)
(force (call-with-input-file "yyy" (lambda (f) .... (delay (xxx ...))))))
и
(defun (xxx ...)
(with-handlers
((later? (lambda (_) (sleep 3) (xxx ...))))
....))
По идее у компилятора есть все возможности сделать ее хвостовой. Но у меня сложилось впечатление, что mzscheme 3.00 это не делает. Так ли это? А как другие реализации? | | Monday, October 20th, 2008 | 7:36 pm [os80]
 |
Детские вопросы
"Для себя" использую схему уже года три. Но вот не могу понять некоторых вещей. 1. Что такое call/cc (что она делает) и зачем она нужна? Что вообще такое continuation? 2. Зачем нужны макросы? Чем без них-то плохо? Если вдруг кто соберётся ответить, просьба не переписывать фразы из RxRS или Википедии ("contionuation - это сохранённое состояние программы"), поскольку понимания от таких фраз не прибавляется. Лучше на примерчиках, на примерчиках :-) Ссылки на хорошие объяснения также приветствуются. | | Tuesday, August 26th, 2008 | 2:57 pm [exabiche]
 |
С чего начать?
Решил научиться хорошо программировать и поэтому изучить лисп. Сначала встал вопрос что выбрать: Common Lisp или Scheme. Пошерстил гугл и почему-то решил, что Scheme интересней. Затем стал выбирать реализацию, остановился пока на scheme48 и mit-scheme. Пожалуйста, подскажите, с чего лучше начинать? Вроде на первой роботов программировали(очень интересно!), а вторую в легендарном масачусетском сделали. Вот и не знаю, что выбрать. А вообще, сильно они отличаются-то? И еще интересно про области применения(я в общем, прочитал на сайтах, но хотелось бы еще и от людей их использующих узнать, где можно применять реализации scheme). Заранее, спасибо, так же буду рад ссылкам на информацию по теме. | | Wednesday, August 6th, 2008 | 6:12 pm [byuth1]
 |
ypsilon
Если кто ещё не видел, обратите внимание на эту интересную реализацию: http://code.google.com/p/ypsilon/Достаточно быстрая (позиционируется как real-time) , маленькая, неплохой набор библиотек, совместимость с R6RS и планируется совместимость с ERR5RS, очень простой биндинг C-шных функций. Развивается активно. Автор на ней пишет игрушки, которые продаёт ;) | | Wednesday, June 18th, 2008 | 6:50 pm [abstract0r]
 |
Вопрос по SICP глава 2.2.4. «Пример: язык описания изображений».
Кто-нибудь знает, как наиболее просто реализовать хотя бы простейшую графику на Scheme. Все упражнения из сабжевой главы сделал, но боюсь, что есть ошибки. Чтобы это проверить, нужно как-то это все запустить. Для этого нужна реализация draw-line. Использую DrScheme 371. | | Wednesday, June 4th, 2008 | 10:13 am [andrew_dashin]
 |
| | Monday, April 28th, 2008 | 11:32 pm [dtnoizr]
 |
халтура на PLT Scheme
Нужно сделать кропотливую работу - написать интерфейс к моей проге - курсовик - игрушечное подобие САПР - ничего сложного просто у меня времени нет - я заплачу денег .... !!!!!!!!!!!!!!!!!! | | Friday, March 28th, 2008 | 4:16 pm [voins]
 |
| | Thursday, March 27th, 2008 | 6:45 am [di_error]
 |
| | Tuesday, February 5th, 2008 | 8:32 pm [octobertide]
 |
| | Wednesday, December 19th, 2007 | 11:18 am [indeyets]
 |
| | Wednesday, December 12th, 2007 | 9:52 pm [kleine_a8ter]
 |
plt on netBSD
Всем привет! Который раз ставлю mzscheme на netBSD и всегда одно и тоже: undefined reference to `scheme_gmpn_count_leading_zeros' Кому-нибудь удавалось поставить? P.S. Гугл не помог=( |
[ << Previous 20 ]
|