2009-06-12 32 views
8

Làm thế nào tôi có thể thực hiện vòng lặp trong PLT-Đề án giống như trong Java-Vòng trong PLT Scheme

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

Cảm ơn musicfreak, tôi đang học nó. Đó là lý do tại sao tôi hỏi câu hỏi này :) Tài liệu lược đồ không rõ ràng với tôi. Nhưng tôi nghĩ tôi sẽ sớm được sử dụng. – fireball003

+0

Được rồi, chỉ cần đảm bảo đây không phải là một trong những điều "làm bài tập về nhà của tôi cho tôi". :) Tôi không biết Đề án nhưng may mắn! –

+2

Nếu đó là một bài tập về nhà thì bạn sẽ thấy "vấn đề" thay vì "vấn đề cú pháp". – fireball003

Trả lời

14

dụ của bạn trong Java không có bản đồ trực tiếp vào ngôn ngữ Scheme bằng cách chỉ cần học một vài từ khóa mới như có aren 't xây dựng rõ ràng để thực hiện một vòng lặp for trong Đề án (trừ khi bạn viết một cấu trúc chính mình!). Cách nấu sách để làm điều này trong Đề án là xác định một hàm đệ quy lặp lại trên một danh sách. Dưới đây là một ví dụ về cách thực hiện một chức năng cho vòng lặp kiểu trong Đề án:

(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 

Taken từ trang này:

Guile and Scheme Links

Dưới đây là một liên kết đến một trang mô tả các ý tưởng mà bạn cần hiểu để dịch vòng từ ngôn ngữ bắt buộc để Đề án:

Scheme Looping Constructs

Đề án là một ngôn ngữ thực sự thú vị để học, bạn cũng nên đọc Structure and Interpretation of Computer Programs, là sách giáo khoa trước đây được sử dụng để giảng dạy Đề án tại MIT.

+0

Cảm ơn người đàn ông. Đây là một trợ giúp lớn :) – fireball003

+0

Không vấn đề gì, nó khiến tôi nghĩ về những kinh nghiệm tích cực của tôi với Đề án ở trường đại học. Học một ngôn ngữ chức năng như Scheme có thể làm cho bạn trở thành một lập trình viên tốt hơn, điều gì đó giúp bạn suy nghĩ về các giải pháp thanh lịch cho các vấn đề. Khi bạn cảm thấy như Đề án bắt đầu có ý nghĩa, tôi khuyên bạn nên kiểm tra một ngôn ngữ "khác", như Prolog. Đó là khác nhau từ cả hai Đề án và Java, và nó có thể dạy cho bạn những điều mới khác nhau. Chúc may mắn. :) –

1

Tôi đề nghị bạn hãy xem qua số "The adventures of a pythonista in schemeland" của Michele Simionato. Đó là cho python-> đề án, nhưng, nó là thực sự cũng bằng văn bản và, quan trọng hơn, đó là từ procedural-> chức năng.

8

Cấu trúc lặp trong Đề án là "do", bạn có thể tra cứu nó trong R5RS specification.

Ví dụ bạn đưa ra sẽ giống như thế này:

(do ((i 0 (+ i 1))) ((> i 9)) 
    (do ((j 0 (+ j 1))) ((> j 2)) 
    (display j) 
    (newline)) 
    (display i) 
    (newline)) 

(do ...) là một chút tổng quát hơn những gì xuất hiện trong ví dụ này. Ví dụ, bạn có thể làm cho nó trả về một giá trị thay vì chỉ sử dụng nó cho các tác dụng phụ của nó. Nó cũng có thể có nhiều "quầy":

(do ((i 0 (+ i 1) 
    (j 0 (+ j 2)) 
    ((stop? i j) <return-value>) 
    exprs...) 
+1

để rõ ràng, ví dụ thứ hai với hai biến vòng lặp sẽ phức tạp nếu bạn không chỉ ra rằng tất cả các biến được lặp lại cùng một lúc - một 'làm' = một vòng lặp. ví dụ này sẽ tương ứng chặt chẽ với vòng lặp C "cho (i = 0, j = 0;!dừng lại (i, j); i = i + 1, j = j + 2) {exprs();} return return_value; "Vâng, về cơ bản là đúng. Chủ yếu là – Aaron

+0

Vâng, đó là sự thật. Tôi sẽ chỉnh sửa bài đăng sau và cố gắng xóa mọi thứ một chút. – Jonas

13

Trong PLT bạn có thể làm điều này:

(for ([i (in-range 10)]) 
    (for ([j (in-range 3)]) (printf "~s\n" j)) 
    (printf "~s\n" i)) 
Các vấn đề liên quan