Я также пытался решить такую задачу, как «сколько строк было удалено, добавлено или просто изменено за выбранный период времени». Поэтому я написал простой сценарий оболочки (только для Linux). Он собирает некоторые статистические данные о модификациях кода. Более подробную информацию и общий скрипт вы можете найти здесь:
http://cyber-fall.blogspot.com/2011/10/tools-linux-svn-generate-statistic.html
Надеюсь, это поможет вам и другим!
Ваш пример на Java не отображается напрямую на язык схемы, просто изучая несколько новых ключевых слов, поскольку нет явных конструкций для реализации цикла for в Scheme (если вы сами не пишете конструкцию!). Способ поваренной книги сделать это в Scheme - определить рекурсивную функцию, которая перебирает список. Вот пример того, как выполнить функцию в стиле цикла for в Scheme:
(define (doit x x-max dx)
(if (<= x x-max)
(begin
;;...perform loop body with x...
(doit (+ x dx) x-max dx))))
(doit a b dx) ; execute loop from a to b in steps of dx
Взято с этой страницы:
Вот еще одна ссылка на страницу, которая описывает идеи, которые вам нужно понять, чтобы перевести циклы от императивных языков к схеме:
Схема - действительно интересный язык для изучения, вам также следует прочитать Структура и интерпретация компьютерных программ , учебник, ранее использовавшийся для Схема обучения в MIT.
Схема - действительно интересный язык для изучения, вам также следует прочитать Структура и интерпретация компьютерных программ , который является учебником, ранее использовавшимся для обучения схемам в MIT.
Схема - действительно интересный язык для изучения, вам также следует прочитать Структура и интерпретация компьютерных программ , который является учебником, ранее использовавшимся для обучения схемам в MIT.
Итерационная конструкция в схеме - « do
», вы можете найти ее в спецификации R5RS .
В приведенном вами примере будет выглядят примерно так:
(do ((i 0 (+ i 1))) ((> i 9))
(do ((j 0 (+ j 1))) ((> j 2))
(display j)
(newline))
(display i)
(newline))
(do ...)
является немного более общим, чем то, что показано в этом примере. Например, вы можете заставить его возвращать значение, а не просто использовать его для своих побочных эффектов. Также возможно иметь много «счетчиков»:
(do ((i 0 (+ i 1)
(j 0 (+ j 2))
((stop? i j) <return-value>)
exprs...)
Предлагаю вам взглянуть на книгу Микеле Симионато "Приключения питониста в стране схем" . Это для схемы python->, но действительно хорошо написано и, что более важно, от процедурного-> функционального.
В PLT вы можете сделать следующее:
(for ([i (in-range 10)])
(for ([j (in-range 3)]) (printf "~s\n" j))
(printf "~s\n" i))