如何将输入转换为列表?
(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)
答案 0 :(得分:3)
第一部分尝试这个:
(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)
请注意,在您的代码中,您使用的是符号,而不是字符串。我相应地写了我的答案。
答案 1 :(得分:0)
这是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)))))
scheme@(guile-user)> (explode 'foo)
$1 = (f o o)
scheme@(guile-user)> (implode '(b a r))
$2 = bar
本书的旧版本可以免费提供online pdf或html格式的标题»sketchy lisp«(尽管明确地处理了Scheme)。在第2.5章中讨论了将符号拆分成列表的问题,反之亦然。