Scheme将条目转换为列表

时间:2012-12-11 21:07:21

标签: list input scheme racket

如何将输入转换为列表?

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

2 个答案:

答案 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章中讨论了将符号拆分成列表的问题,反之亦然。