2016-12-24 10 views
1

私はスキームが新しくなっています。私は、例えばPythonをよく知っています。しかし、スキームはとても面白い言語のように思えるので、私は学びたいと思っています。エラーなし、出力なし - 何が問題なのですか?

私は

はインターバルの間で包括的にすべての整数を出力するプログラムを作成することをいくつかのコードを作成しようとしている(a、b)は、および(ランダムで順番に8のすべての倍数を置き換えます一様分布)、数値ではなく、空白ではなく、印刷可能なASCII文字。すべての場合において< bと仮定する。数字が1桁を超える場合は、置換文字の文字数が一致していることを確認してください。

私は質問here(コードゴルフの質問に)答えることを試みることができるので、それはもともとだったが、今、私は方法がわからないので、私はそれをやろうとしているので、私は気にせませんよ溶液の長さ。今、私はアスキー文字で何もしていない、ちょうど何かを働かせようとしている。私はrepl.itの中でそれをオンラインでコーディングしていますが、出力はありません。エラーでもありません。私の予想される出力は、1から16のインターバルで機能を実行し、シーケンス1 2 3 4 5 6 7 h 9 10 11 12 13 14 15 hを印刷することです。

(define a 1) 
(define b 16) 
(define (s8 a b) 
(let loop ((a<=b)) 
    (if (= (mod a 8) (0)) 
    (write h)) 
    (else 
    (write a)) 
    (define a (+ a 1)) 
(s8 a b) 
(write "hello") 

助けてください。ありがとう!

答えて

2

私は特にスキーヤーではありませんが、私は他のリスプにかなり精通していますし、あなたのコードから私はあなたの混乱を想像することができます。あなたのコードを少し修正して実行しましたが、出力がおそらくまさにあなたが期待しているものとは限りません。常にそれは3つの式を取ると小文字は区別他を持​​っている場合

(define a 1) 
(define b 16) 
(define (s8 a b) 
    (when (<= a b) 
    (if (= (mod a 8) 0) 
     (write "h") 
     (write a)) 
    (s8 (+ a 1) b))) 
(s8 a b) 
(write "Hello") 

は、まず、のLispで、最初のテストで、第二は、「その後」のブランチ、第三は、「他」の枝です。 "when"と "unless"を指定すると、複数行のコードを順番に持つことができますが、 "then"または "else"の場合はそれぞれ失われます。

第2に、スキームでは、再帰を使用してループします。 Afaik、基本的なスキームでこれは唯一のループですが、最適化するための多くのトリックがあります。

+0

ありがとう、私はかなり混乱しており、これはうまくいった! =) – heather

関連する問題