2012-05-17 31 views
11

Tôi đã có một loạt các "kế thừa" mã chương trình Guile mà tôi muốn chạy trong IDE Lược đồ Racket. Có vẻ như có đủ sự khác biệt để làm cho bài tập này không tầm thường. (Mức kiến ​​thức Scheme của tôi là cấp độ để hoàn thành The Little Schemer).Sự khác biệt giữa Đề án Guile và Đề án Chuẩn (trong IDE vợt)?

Câu hỏi của tôi là:

  1. sự khác biệt giữa Guile Đề án và Đề án Standard (trong vợt IDE) là gì?
  2. Theo những khác biệt này, nhìn chung, tôi cần thực hiện các bước nào để chuyển đổi một số Mã Đề án Guile thành Đề án chuẩn?

bổ sung: (hài lòng với sự phân kỳ giữa vợt Đề án và R5RS/R6RS) - những gì tôi muốn là để có được 'cái gì' để chạy trong IDE vợt - chứ không phải là ngôn ngữ vợt.

+1

Nếu bạn đã bị mắc kẹt chặt chẽ với R5RS và R6RS tiêu chuẩn, sau đó các ngôn ngữ tương thích được xây dựng trong vợt có thể giúp đỡ. Xem: http://docs.racket-lang.org/guide/standards.html – dyoo

+1

Bạn có thể chỉ định ngôn ngữ nào bạn đang khai báo trong DrRacket (R5RS/vợt/etc) không? Bạn có thể đưa ra các ví dụ về nơi mã bị phá vỡ không? – oobivat

+0

@oobivat Tôi đã cố tình quét lưới rộng - câu hỏi đằng sau câu hỏi của tôi là "những thứ không chuẩn trong lược đồ guile" là gì. Nếu nó làm cho câu hỏi dễ dàng hơn để trả lời - sau đó tôi muốn cụm từ nó là "Những gì có khả năng phá vỡ với mã chương trình guile năm 1994 của tôi khi chạy trong Racket thiết lập để R5RS - và làm thế nào để sửa chữa nó?" – hawkeye

Trả lời

5

Nếu bởi "Chuẩn Đề án (trong vợt IDE)," bạn có nghĩa là ngôn ngữ vợt, tức là, những gì bạn nhận được khi bạn có tiền tố mã của bạn với #lang racket, sau đó bốn sự khác biệt đầu để tìm cho ra là:

  • một hệ thống mô-đun khác nhau
  • một hệ thống vĩ mô khác nhau (tùy thuộc vào bao nhiêu tuổi mã của bạn là)
  • bất biến nhược điểm tế bào (trừ khi bạn nhập những có thể thay đổi)
  • không IFS một nhánh trong vợt (sử dụng when)

Để mã cổng từ Guile to Racket, hãy tìm xem tệp nào nằm ở dưới cùng của phụ thuộc của bạn, tức là tìm các tệp không phụ thuộc vào các tệp khác. Mở một tệp như vậy trong Racket, thêm dòng #lang vợt ở trên cùng và cố gắng chạy nó.

Bạn rất có thể sẽ gặp phải một số lỗi "số nhận dạng không liên kết". Nếu bạn may mắn, chức năng có mặt trong Racket, nhưng không có trong ngôn ngữ "vợt". Tìm kiếm tên trong tài liệu Racket, và nếu bạn tìm thấy nó, sau đó sử dụng (yêu cầu ...) để nhập tên vào chương trình của bạn.

Sau đó chạy lại chương trình để tìm lỗi tiếp theo.

Một số chức năng được đặt tên khác nhau trong Guile và Racket, vì vậy hãy tra cứu tên trong tài liệu Guile và xem nó hoạt động như thế nào. Sau đó mở tài liệu Racket về cùng một chủ đề, và xem những gì nó được gọi là trong vợt.

Trong một số trường hợp, bạn có thể phải thực hiện các thay đổi lớn hơn. Nếu bạn không thể tìm thấy một số chức năng trong tài liệu Racket, hãy thử hỏi danh sách gửi thư. Nó có thể là nó chỉ đơn giản là có một tên khác nhau, hoặc ai đó thực hiện nó và đặt nó trên PLaneT (do đó nó sẽ không xuất hiện trong tài liệu cho đến khi bạn đã cài đặt gói).


Ví dụ về nhập khẩu srfi/1 vào ngôn ngữ R5RS.

#lang r5rs 
(#%require srfi/1) 
(xcons 1 2) 

Sự khác biệt từ mã R4RS Đề án hiện đại?

Một điều cần chú ý là trong R4RS danh sách trống '() được tính là sai, không phải nó được hiểu là đúng.

Xem câu hỏi này cho nhiều điều để tìm cho ra:

Running SICP Pattern Matching Rule Based Substitution Code

Xem thêm danh sách các thay đổi từ tiêu chuẩn R5RS: List of changes from R4RS to R5RS

+3

Tôi nghi ngờ người đăng có thể đã hỏi về ngôn ngữ R5RS hoặc R6RS trong DrRacket. –

+0

Cảm ơn Sam - Tôi đã quét toàn bộ mạng để có được tất cả các thông tin có thể có. Tôi nghĩ rằng bạn đang nói rằng bình luận ở trên là Racket cụ thể - và không áp dụng cho R5RS. – hawkeye

Các vấn đề liên quan