Home
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 [info]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]
    Ещё одно воплощение R6RS
    Господа plt-scheme.org весьма порадовали. Так что наверное теперь всякие икарусы опять уходят в сторону.
    Monday, April 28th, 2008
    11:32 pm
    [dtnoizr]
    халтура на PLT Scheme
    Нужно сделать кропотливую работу - написать интерфейс к моей проге - курсовик - игрушечное подобие САПР - ничего сложного просто у меня времени нет - я заплачу денег ....
    !!!!!!!!!!!!!!!!!!
    Friday, March 28th, 2008
    4:16 pm
    [voins]
    правильное/неправильное использование dynamic-wind
    Начну сразу с кода:
    (let ((port (open-input-file "some-file.scm")))
      (dynamic-wind
          (lambda () #f)
          (lambda () (read port))
          (lambda () (close-input-port port))))


    дальше довольно длинно, нудно, и не факт что правильно )
    Thursday, March 27th, 2008
    6:45 am
    [di_error]
    книга
    пардон, крос-пост, очень хочетя её найти .. или хотя бы услышать чьё-нибудь мнение:

    очень интересная на мой взгляд книга, особенно следует подмтить, что написал ёе тов. Суссман!

    http://www.amazon.co.uk/Structure-Interpretation-Classical-Mechanics-Sussman/ <- ну тут уж просто ужасно дорого! или она реально стоит того? это около 70 (вроде) почти уже не условных единиц ..
    Tuesday, February 5th, 2008
    8:32 pm
    [octobertide]
    Wednesday, December 19th, 2007
    11:18 am
    [indeyets]
    SICP, субтитры
    А существуют ли где-то в природе русские субтитры к видеолекциям Structure and Interpretation of Computer Programs?

    Я сам с удовольствием смотрю в оригинале, но возникает желание показывать их знакомым, а у знакомых не всегда достаточный уровень английского…
    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 ]
About LiveJournal.com

Advertisement