Петля в схеме PLT - PullRequest
       52

Петля в схеме PLT

8 голосов
/ 12 июня 2009

Как реализовать цикл в plt-схеме, как в java-

for(int i=0;i<10;){
     for(int j=0;j<3;){
          System.out.println(""+j);
          j++;
     }
      System.out.println(""+i);
      i++;
}

Ответы [ 4 ]

14 голосов
/ 12 июня 2009

Ваш пример в Java не отображается напрямую на язык Scheme, просто изучая несколько новых ключевых слов, поскольку в Scheme нет явных конструкций для реализации цикла for (если вы сами не пишете конструкцию!). Способ поваренной книги сделать это в 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

Взятые с этой страницы:

Ссылки Guile и Scheme

Вот еще одна ссылка на страницу, которая описывает идеи, которые вам нужно понять для перевода циклов с обязательных языков на схему:

Схемы циклических конструкций

Схема - действительно интересный язык для изучения, вы также должны прочитать Структура и интерпретация компьютерных программ , который является учебником, ранее использовавшимся для преподавания Схемы в MIT.

13 голосов
/ 26 июня 2009

В PLT вы можете сделать это:

(for ([i (in-range 10)])
  (for ([j (in-range 3)]) (printf "~s\n" j))
  (printf "~s\n" i))
8 голосов
/ 12 июня 2009

Итерационная конструкция в схеме - "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...)
1 голос
/ 12 июня 2009

Я предлагаю вам взглянуть на «1001 *» Микеле Симионато «Приключения питониста в Schelandland» . Это для Python-> схема, но, это действительно хорошо написано и, что более важно, это от процедурно-> функциональных.

...