2010-08-01 28 views
1

我知道如果我按照以下方式編寫我的方案代碼並鍵入(單詞'(a b c)),它將以相同的順序排列列表。您能否告訴我是否有辦法以相反的順序打印出來。 Ex-(列出'c'b'a)。 它需要是用戶的輸入,我以相反的順序打印出來。所以,我不能稱它(反向'(a b c))。因爲用戶輸入可以是'(x y z)'。 非常感謝。如何在方案中向後打印字符串?

(定義(字x)

(如果(空?x)x

(缺點(車X)(字(CDR X)))))


(字 '(A B C))

(名單' A 'B' C)

回答

5
(reverse '(a b c)) 

將扭轉你的字符串。不過,我懷疑這可能是功課,你應該寫自己的reverse功能。

如果是這樣,你可以扭轉一個空的列表嗎?如果你有一個列表,並且與列表的其餘部分相反,你能否看到整個列表的反面?你能否看到如何製作一個反轉這些片段的列表的函數?

1

提示:cons創建一個由其第一個參數及其第二個參數組成的列表。現在,您正在使用它創建第一個元素的列表,然後是應用於其餘元素的相同函數,並按照與原來相同的順序創建列表。

如果您創建了一個應用於第一個元素之後的其餘元素的相同函數的列表,那麼您會發生什麼?

+1

'cons'不會創建一個列表,而是一個cons單元格。除此之外,很好的提示。 – Svante 2010-08-02 09:58:57

1

謝謝大家的信息和幫助。我找到了一個辦法。只是在有其他人在尋找的情況下。

(define (word lis) 
    (if (null? lis) 
     '() 
     (append (word (cdr lis)) 
       (list (car lis))))) 
+3

哦!這真是太可怕了。請不要關掉它。 – 2010-08-02 20:47:01

+0

@JohnClements究竟是什麼讓它變得可怕?使用'append'(由於其時間複雜性)?遞歸應用程序不在尾部位置? 'car'和'cdr'而不是'first'和'rest'?還有別的嗎? (我是一個新手Racketeer,所以我想學習。) – blubberdiblub 2017-04-22 10:35:31

+0

你說得對,我根本沒有幫助。這個解決方案需要n^2次。做得更好需要使用累加器,這使得它是線性的。回想起來,我希望我沒有這樣說過。 :) – 2017-04-22 23:11:55

2

這是你想要的嗎?

(list->string (reverse (string->list "market"))) 
"tekram"