2016-12-24 56 views
1

我對計劃很陌生,例如,我更熟悉python。不過,我正在努力學習,因爲方案似乎是一種非常有趣的語言。沒有錯誤,沒有輸出 - 怎麼了?

我試圖創造一些代碼,

創建打印的間隔與包含地所有整數程序(A,B),並取代序列中的每8多用隨機(均勻分佈),非數字,非空白,可打印的ASCII字符。在所有情況下假設一個< b。如果該號碼超過1位數,請確保替換字符的數量匹配!

它原是所以我可以嘗試回答這個問題here(代碼高爾夫球問題),但現在我只是想這樣做,因爲我不知道怎麼回事,所以我不擔心解決方案的長度。現在,我沒有對ascii字符做任何事情,只是試圖找到一些工作。我在線編碼,在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

我並不特別是一個陰謀家,但我很熟悉其他lisps和你的代碼,我可以想象你是多麼的困惑。我修補了一下你的代碼,所以它運行,雖然我避免了非常多的改變,所以輸出可能不是你所期望的。

(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,如果總是有一個else區分它需要三個表達式中,第一個是試驗,第二個是「則」分支,第三是「其他」的分支。 「when」和「unless」讓你有多行代碼順序,但你分別失去了「then」或「else」的情況。

其次,在方案中,你要循環遞歸。 Afaik在基本方案中是唯一的循環,但他們有很多技巧來優化它。

+0

謝謝,我很困惑,這工作! =) – heather