如何將輸入轉換爲列表?Scheme將條目轉換爲列表
(define (conjuger v t p)
(cond ((equal? t '(present)) (present (radical v) p))
我想輸入V作爲一個詞,但我不得不把它輸入作爲程序的工作清單。有沒有辦法有計劃做這個:
'(m a n g e r) => '(manger)
'(manger) => '(m a n g e r)
如何將輸入轉換爲列表?Scheme將條目轉換爲列表
(define (conjuger v t p)
(cond ((equal? t '(present)) (present (radical v) p))
我想輸入V作爲一個詞,但我不得不把它輸入作爲程序的工作清單。有沒有辦法有計劃做這個:
'(m a n g e r) => '(manger)
'(manger) => '(m a n g e r)
嘗試此第一部分:
(define (implode lst)
(string->symbol
(apply string-append
(map symbol->string lst))))
(list (implode '(m a n g e r)))
; => '(manger)
而這第二部分:
(define (explode itm)
(map (lambda (c) (string->symbol (string c)))
(string->list
(symbol->string itm))))
(explode (car '(manger)))
; => '(m a n g e r)
注意,在你的代碼你正在使用符號,而不是字符串。我相應地寫了我的答案。
這是Nils M. Holm,Sketchy Scheme的版本。第4.5版(Raleigh 2011)p。 72-74:
(define (compose f g)
(lambda x
(f (apply g x))))
(define symbol->list
(compose string->list symbol->string))
(define (explode item)
(map (lambda (item)
(string->symbol
(string item)))
(symbol->list item)))
(define (implode item)
(letrec
((sym->char
(lambda (item)
(let ((string (symbol->string item)))
(if (not (= (string-length string) 1))
(error "bad symbol -- IMPLODE")
(string-ref string 0))))))
(string->symbol
(list->string
(map sym->char item)))))
[email protected](guile-user)> (explode 'foo)
$1 = (f o o)
[email protected](guile-user)> (implode '(b a r))
$2 = bar
較舊版本的書是在標題»粗略口齒不清«下PDF或HTML格式免費avaible online(與方案明確處理,雖然)。將符號拆分成列表或反過來的問題在第2.5章中討論。
我不知道那些程序有着名的名字。如果你不介意的話,我借用了我的答案的名字:) –
@Óscar:我不知道這些名字是否是衆所周知的(我在Guile或Racket中找不到它們),但它們相當不錯。別客氣。 :) – 2012-12-12 07:24:48
把這樣的符號分開是有點不尋常的。例如,輸入是否以字符串形式出現,是否有特定的原因? – dyoo