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)

そしてこれは2番目の部分です:

(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

本の古いバージョンは、タイトル »sketchy lisp« (ただし、Scheme を明示的に扱っています) というタイトルで、pdf または html 形式でオンラインで無料で入手できます。シンボルをリストに分割する問題、およびその逆の問題は、2.5 章で扱われます。

于 2012-12-11T21:52:07.890 に答える