如何将输入转换为列表?
(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)))))
scheme@(guile-user)> (explode 'foo)
$1 = (f o o)
scheme@(guile-user)> (implode '(b a r))
$2 = bar
这本书的旧版本可以在线免费获得 pdf 或 html 格式,标题为 »sketchy lisp«(但明确处理 Scheme)。第 2.5 章讨论了将符号拆分为列表的问题,反之亦然。