2012-05-17 10 views
11

Mam kilka "starych" kodów Guile Scheme, które chcę uruchomić w IDE programu Racket Scheme. Wydaje się, że jest wystarczająco dużo różnic, aby uczynić to nietrywialnym ćwiczeniem. (Mój poziom wiedzy na temat schematu jest poziomem do ukończenia The Little Schemer).Różnice między programem Guile a standardowym (w Racket IDE)?

Moje pytanie brzmi:

  1. Jakie są różnice pomiędzy Scheme Guile i schematu standardowego (w Racket IDE)?
  2. W świetle tych różnic, ogólnie, jakie kroki muszę podjąć, aby zmienić kod schematu guile do standardowego schematu?

dodatkowe: (zadowolony z rozbieżności między schemacie rakieta R5RS/R6RS) - co chcę to dostać 'coś', aby uruchomić w IDE Racket - zamiast języka rakiety.

+1

Jeśli zatrzymany ściśle z R5RS i W takim przypadku pomocne mogą być standardy R6RS, a następnie języki kompatybilności wbudowane w Racket. Zobacz: http://docs.racket-lang.org/guide/standards.html – dyoo

+1

Czy możesz określić, który język deklarujesz w DrRacket (R5RS/racket/etc)? Czy mógłbyś podać przykłady tego, gdzie łamany jest kod? – oobivat

+0

@oobivat Celowo zamoczyłem sieć - pytanie, które kryje się za moim pytaniem, brzmi: "co to jest niestandardowy schemat w schemacie podstępu". Jeśli łatwiej odpowiedzieć na to pytanie, określę to jako "Co może zepsuć mój kod schematu przekrętów z 1994 r., Gdy działa w trybie Racket ustawionym na R5RS - i jak mogę to naprawić?" – hawkeye

Odpowiedz

5

Jeśli przez „Scheme Standard (w Racket IDE),” masz na myśli język rakieta, czyli to, co dostajesz, kiedy prefiks kodu z #lang racket, wówczas czterech największych różnic należy zwrócić uwagę to:

  • inny system modułowy
  • inny system makro (w zależności od tego jak stary kod jest)
  • niezmiennych minusy komórek (chyba że zaimportować te zmienne)
  • nikt uzbrojonych IFS w Racket (użyj when)

Aby przesłać kod z Guile do Racket, sprawdź, które pliki są "na dole" twoich zależności, tj. Znajdź pliki, które nie zależą od innych plików. Otwórz taki plik w Racket, dodaj linię #lang na górze i spróbuj go uruchomić.

Najprawdopodobniej wystąpią błędy "niezwiązanego identyfikatora". Jeśli masz szczęście, funkcja jest dostępna w Racket, ale nie jest zawarta w języku "rakieta". Wyszukaj nazwę w dokumentacji Racket, a jeśli ją znajdziesz, użyj (wymaga ...), aby zaimportować nazwę do swojego programu.

Następnie uruchom ponownie program, aby znaleźć następny błąd.

Niektóre funkcje są nazywane w różny sposób w Guile i rakieta, więc poszukaj nazwy w dokumentacji Guile i zobaczyć, co robi. Następnie otwórz dokumentację rakietową na ten sam temat i zobacz, jak się nazywa w Rakiecie.

W niektórych przypadkach konieczne może być wprowadzenie większych zmian. Jeśli nie możesz znaleźć jakiegoś elementu funkcjonalności w dokumentacji Racket, spróbuj zapytać o listę mailingową. Możliwe, że po prostu ma inną nazwę lub ktoś ją zaimplementował i umieścił na PLaneT (w ten sposób nie pojawi się w dokumentacji, dopóki nie zainstalujesz pakietu).


Przykład importowania srfi/1 do języka R5RS.

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

Różnice z kodem R4RS do nowoczesnego programu?

Jedną z rzeczy, na które należy zwrócić uwagę, jest to, że w R4RS pusta lista "() została uznana za fałszywą, nie jest interpretowana jako prawdziwa.

Zobacz to pytanie za więcej rzeczy zwrócić uwagę:

Running SICP Pattern Matching Rule Based Substitution Code

Zobacz również ta lista zmian od standardu R5RS: List of changes from R4RS to R5RS

+3

Podejrzewam, że plakat mógł pytać o języki R5RS lub R6RS w DrRacket. –

+0

Dzięki Sam - zamiatałem sieć, aby uzyskać wszystkie możliwe informacje. Myślę, że mówisz, że powyższy komentarz jest specyficzny dla rakiety - i nie dotyczy R5RS. – hawkeye

Powiązane problemy