質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scheme

Schemeは、Lispから派生したプログラミング言語の一つであり、仕様または実装を指す場合もあります。言語自体の仕様はシンプルで、関数型言語として理解しやすいことから記号処理などで主に用いられている言語です。

Q&A

解決済

3回答

1652閲覧

schemeでdoループを利用してlistを作りたい

ruei

総合スコア284

Scheme

Schemeは、Lispから派生したプログラミング言語の一つであり、仕様または実装を指す場合もあります。言語自体の仕様はシンプルで、関数型言語として理解しやすいことから記号処理などで主に用いられている言語です。

0グッド

0クリップ

投稿2018/08/28 11:18

schemeでdoループを利用してvector3のlistを作りたいと思っています。
doループの部分は何とか出来ました。

Scheme

1(do ((x -5 (+ x 1))) 2 ((> x 5)) 3 (do ((y -5 (+ y 1))) 4 ((> y 5)) 5 (print x " " y "\n")))

ここで、このループを利用して、このループの走る順番に要素(x,y,0)の入ったvector3を要素とするlistを作りたいと思っています。

vector3の説明

ですが、どのようにしたらいいかわかりません。
分かる方がいらっしゃったらお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

doを使わなくてよければ、こんな感じですかね。

scheme

1(map (lambda (x) (map (cut vector3 x <> 0) (iota 11 -5))) 2 (iota 11 -5))

投稿2018/08/28 15:07

emasaka

総合スコア524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

いくつかの方法が考えられますがそのような形で do を使ったループを前提とするならば、リストを末尾から組み立てて、最後に反転させるのが最も簡単な方法だと思います。

(let ((r '())) (do ((x -5 (+ x 1))) ((> x 5)) (do ((y -5 (+ y 1))) ((> y 5)) (set! r (cons (vector3 x y 0) r)))) (reverse r))

投稿2018/08/28 12:10

SaitoAtsushi

総合スコア5444

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

線形リストの最後にどんどん追加していく方法もありますねっ。(・∀・)

Scheme

1(define my-vector3-list 2 (let* ((queue (list #f)) (queue_last queue)) ; queue_last は線形リストの最後セルだよっ。 3 (do ((x -5 (+ x 1))) ((> x 5)) 4 (do ((y -5 (+ y 1))) ((> y 5)) 5 (set-cdr! queue_last (list (vector3 x y 0))) 6 (set! queue_last (cdr queue_last)) 7 ) 8 ) 9 (cdr queue) ; 先頭の #f はゴミデータだから捨てるんだ 10 ) 11)

投稿2018/09/01 09:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問