1

私は現在、整数をリストに変換しようとしています。

例えば

1234 => 1、2、3、4で構成されるリスト

私はこれを持っています:

(string->list (number->string 1234))

残念ながら、#と\が追加されます。これは数字の文字列表現だと思います。これらの記号を削除するにはどうすればよいですか。整数を並べ替えて、リストを出力する必要があるので。

上記のコマンドの出力は次のとおりです。

(#\ 1#\ 2#\ 3#\ 4)

4

5 に答える 5

6

これは私が書いた関数で、毎回10で割って数値を分解します:

(define (num->list num)
  (if (< num 10)
      (list num)
      (append (num->list (floor (/ num 10)))
              (list (- num (* 10 (floor (/ num 10))))))))

明らかに、これは正の整数でのみ機能しますが、負の整数が必要な場合は簡単に変更できます。

于 2009-01-19T15:31:31.237 に答える
3

ジョナサンが言ったように、#\ は文字であることを意味します。そのため、文字を数値に変換する必要があります。これを行う簡単な方法を次に示します。

(map (lambda (c) (- (char->integer c) 48))
         (string->list (number->string 1234)))
于 2009-01-19T20:33:33.653 に答える
0

文字列をリストに変換すると、文字のリストが作成されるため、# が取得されます。#\ は区切り文字です。; そのため、リストの操作が完了したら、かなり簡単に文字列に再変換できます。

于 2009-01-19T20:13:38.077 に答える
0

私はスキームに精通していませんが、コードを多用し、言語に依存しないアプローチは、数学ループを使用して各桁を取得することです。

1234 が x の場合: digit_1 = x%10 digit_2 = x%100 - digit_1 digit_3 = x%1000 - digit_2 - digit_1 など。

x < 1000 の場合は数字 3 の後に停止するように、各駅でチェックを追加する必要があります。言語によっては、さまざまな方法でこれにループを追加できます。

于 2009-01-19T15:40:37.740 に答える
0

次の点に注意してください。

(floor (/ num 10))

スキームで商手続きを使用するのと同じです:

(quotient num)

その例を次に示します。

Welcome to DrRacket, version 6.1.1 [3m].
Language: Pretty Big; memory limit: 128 MB.

> (floor (/ 235 10))
23
> (quotient 235 10)
23

@Kyle 関数を次のように書き換えることができます。

(define (numberToList number)
   (if (< number 10) (list number)
       (append (numberToList (quotient number 10))
               (list (- number (* 10 (quotient number 10)))))))
于 2015-02-11T15:32:17.980 に答える