4

如何将输入转换为列表?

(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)
4

2 回答 2

4

在第一部分试试这个:

(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)

请注意,在您的代码中,您使用的是符号,而不是字符串。我相应地写了我的答案。

于 2012-12-11T21:27:27.727 回答
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

这本书的旧版本可以在线免费获得 pdf 或 html 格式,标题为 »sketchy lisp«(但明确处理 Scheme)。第 2.5 章讨论了将符号拆分为列表的问题,反之亦然。

于 2012-12-11T21:52:07.890 回答