2016-11-05 4 views
0

私は以下を持っています:値リストを持つリスト。Common Lispリストから行列を作成する

(List (list 1 2) (list 3 4 5) (list 1)) 

注:それは2次元配列であるので、私はこのような構造を得るカント:(LIST (LIST (LIST 1)))、つまり二次リスト内の文字\数字のみが存在することができます。

私がしたい:私のリストを作るであろう、関数を作成し、空のフィールドを埋めるためにはnilのを使用して同じ数の列を持っているので、私は、入力として上記のリストを持っている場合は、私の出力は次のようになります。

((1 2 nil nil) 
(3 4 5 nil) 
(1 nil nil nil)) 

申し訳ありませんが、それは簡単でなければなりませんが、私はLispと関数型プログラミングの初心者です。

注:私はCONSとAPPENDだけを使用する必要がありますが、これは私の主な問題です。CONSは各要素を別のリストに入れ、APPENDはすべてのnilを削除します。

UPD:それは以下の言われたように私が行っている、しかし、私はまだ1つの問題

(DEFUN FINDMLENGTH (INPUT) 
(COND 
    ((NULL INPUT) NIL) 
    (T (AND 
      (COND ((< MAXLENGTH (length (CAR INPUT))) (SETQ MAXLENGTH (length (CAR INPUT))))) 
      (FINDMLENGTH (CDR INPUT)))))) 

(DEFUN MAKESQUARE (INPUT RowNumb) (prog (a)) 
(COND 
    ((NULL INPUT) NIL) 
    (T (AND 
      (SETQ SqMatr (APPEND SqMatr (LIST (append (car INPUT) (make-list (- RowNumb (length (CAR INPUT)))))))) 
      (MAKESQUARE (CDR INPUT) RowNumb))))) 
(SETQ SqMatr nil) 
(SETQ MAXLENGTH 0) 

を持っている問題は、私は現在、誰かが、私はそれらを作ることができますどのように明確にすることができ、データを渡すために、グローバル変数を使用していますということです自己によって変数を返しますか?

+0

あなたの例で内部リストあたり4つの要素があるのはなぜですか?それは入力として与えられていますか? – coredump

+0

どのような入力が可能なのかの例ですが、行数と列数は未定義です。 – rainbowShiningUnicorn

答えて

2

あなたの宿題の出発点:各行に対して、関数n-nの要素のリストを作成する関数make-listを使用できます。ここで、n =希望の長さ - あなたがすでに持っている行の長さです。これにより、フィルアップ・ノイルを含むリストが作成されます。次に、これを最初の行に追加することができます。 例:

(append '(1 2) (make-list (- 4 (length '(1 2))))) => (1 2 nil nil)

結果を追加、行ごとにこれを行います。

関連する問題