Просуммировать по длине вектора, новичковое

Есть кто живой? Спасите-помогите-мы-сами-не-местные.
Записываю музыку в lilypond-е, который написан на scheme guile
Хочу (и не могу сказать :) ) написать функцию, которой передавать вектор из скольких-то N чисел, не знаю из скольки (каждый раз сколько понадобится), а она бы склеивала столько N раз строку из заготовок. Термин "хвостовая рекурсия" уже паники не вызывает )

Подскажите, как узнать число элементов в векторе (или листе, если вектора не окажется в доступных из lilypond'а типах)
Спасибо!

Морда-1
  • yushi

Встроенная Схема и указатель на объект

Здравствуйте!

Есть проект на C++, к некоторым классам которого автоматически создаются привязки с помощью SWIG. Есть желание прикрутить к нему скрипты на Scheme. Вопрос: есть ли какой-то способ вызвать из кода на C++ схемную функцию, передав ей в качестве аргумента указатель на объект? (Желательно обёрнутый в SWIG-овский тип, но если у какой-то из встраиваемых Схем, не обязательно из числа поддерживаемых SWIG, есть для этого собственные средства, в крайнем случае сгодятся и они.)

Самостоятельно я способа это сделать в документации на SWIG и на три поддерживаемых им интерпретатора (CHICKEN, Guile, Racket) не нашёл. Пока остановился на таком решении: есть уникальный индентификатор объёкта (в моём случае оказалось удобно использовать обычную C-шную строку, char*) и C-шная функция, получающая по этому идентификатору указатель на объект. В схемную функцию передаётся идентификатор, а в написанных на C++ функциях, экспортируемых в Схему, по этому идентификатору снова получается указатель на объект. Но мне самому это решение не нравится, и ручной работы получается многовато, и архитектура выходит, на мой вкус, уродливой.

Кстати, все три Схемы, которые поддерживаются SWIG, показались мне не очень подходящими для прикручивания к плюсовому проекту. В Guile 1.8 тип SCM несовместим со стандартом C++ (в 2.0 это вроде поправили, но 2.0 поставишь сильно не во всякое окружение, уж больно новых библиотек он хочет). В CHICKEN очень расстроила тамошняя система пакетов, работающая в обход пакетного менеджера ОС, что гарантирует танцы с бубном при деплое (у меня не удалось заставить её нормально и стабильно работать). В Racket — количество телодвижений, необходимых, чтобы дёрнуть интерпретатор из своего C-шного кода.

Кто использовал скрипты на Scheme в своих приложениях на C++? Каким интерпретатором для этого пользовались? Насколько реально прикрутить в этих целях, например, Gambit?

SICP по-русски.

Сделал перевод первых двух лекций SICP.



Если кому-нибудь интересно вторую лекцию искать здесь ЦКУНК! 
Если кто-то не в курсе SICP это вводный курс по программированию читался в MIT, в начале 80х. Не смотря на то что прошло уже четверть века, актуальности лекции не потеряли. 
2010
  • voins

(no subject)

Премодерацию включил. Добавил alexott в число модераторов, так что теперь нас трое. Будет плохо - поправим по ходу.
2010
  • voins

(no subject)

Может премодерацию введём? А то, честно говоря, уже несколько поднадоело спам чистить. Возражения есть?
recycled

tail recursion [closed]

Даны две функции:
(define accumulate-if-1 (lambda (test? lst init)
                    (define iter (lambda (lst acc)
                                   (cond ((empty? lst) acc)
                                         ((test? (car lst)) (iter (cdr lst) (+ acc (car lst))))
                                         (else (iter (cdr lst) acc)))))
                    (iter lst init)))

(define accumulate-if-2 (lambda (test? lst init)
                          (cond ((empty? lst) init)
                                ((test? (car lst)) (accumulate-if-2 test? (cdr lst) (+ init (car lst))))
                                (else (accumulate-if-2 test? (cdr lst) init)))))
Судя по затратам памяти и процессорного времени вторая функция не желает разворачивать в цикл. Объясните, пожалуйста, почему? Заранее благодарен.
  • Current Mood
    quixotic quixotic
george
  • aawee

Связь PLT Scheme и C(++,#)

Приходилось ли вам реализовывать описанное здесь http://docs.plt-scheme.org/inside/index.html ? Имеется ввиду возможность вызова на Схеме функций из Си-библиотек.

Одно из первых что надо сделать в п.1.2.1 http://docs.plt-scheme.org/inside/overview.html
- это "скомпилировать" C-файл при помощи mzc.exe - при этом он не компилирует его сам, а использует найденный компилятор.

Вопрос - какой использовать компилятор, чтобы mzc его видел? (Windows) У меня только Ms Visual студия - mzc говорит "compile-extension: can't find an installed C compiler".

И реально ли связать Схему именно с C#? потому что я видел упоминания только о C/C++.

Благодарю за ответы :)
george
  • aawee

PLT Схема..

Изучая PLT Scheme, не могу найти ответы на ряд вопросов.

1) пользуюсь т.н. средой разработки Dr.Scheme. Здесь при выборе опции Choose Language (выбрать язык) появляется много вариантов - в чем суть этих "языков"? Какой из них ближе к собственно Scheme?

2) как конкатенировать (объединять) строки?

3) пытаюсь написать класс..
(define point% (class object%
(init xin)
(init yin)
(define x xin)
(define y yin)
(super-new)
))
поля получаются автоматически private. как сделать public поля?
имею догадку что такой возможности нет, из-за идеи "правильного программирования" у функциональных языков. Но нигде не нашел упоминания что это невозможно..