2016-12-13 5 views
0

整数のシーケンスを(0 1 2 3)にするための関数がLISPに存在しますか?LISP - 整数のシーケンス

私はmake-sequenceを見つけましたが、整数のシーケンスを作成する方法は見つかりませんでした。

私はmake-listと何も試していません。

Schemeには、(build-list 5 (lambda (x) x))が存在することがわかります。 build-listmake-listに変更しようとしましたが、動作しませんでした。

いくつかのアイデア?おかげ

編集:私はmake-list 5 ==> (0 1 2 3 4)

+0

する必要がありますを使用して?私は昔から覚えているようです(リスト1 2 3)それを行うだろう。 –

+0

@ IanA.Mason Common Lisp(IDE Lisp Works)。私はリストの長さしか知っていないので、 '(list 1 2 3)'を行うことができます。 'make-list 5 ==>(0 1 2 3 4)'のようなものが必要です。 –

答えて

2

単にloopで行わ:

(loop :for n :below 10 :collect n)   
; ==> (0 1 2 3 4 5 6 7 8 9) 
+3

' n個を集める) ' – Kaz

+0

は、私は私自身の機能を内蔵し:(((配列「())) (dotimes(I長) (setqの配列(短所配列i))を聞かせて) '(関数定義のビルドシーケンス(長さ) を (逆順))) ' –

+0

@ Kaz私はそれに似たものがあると知っていましたが、何とか私は覚えていませんでした:-)更新しました。 – Sylwester

1

ようなものが必要なCommon Lispの任意の適合実装上で動作するように意図されAlexandriaライブラリは、iotaを定義します。

(iota 5) 
=> (0 1 2 3 4) 

あなたはまた、開始とステップをカスタマイズすることができます:

(iota 3 :start 1 :step 1.0) 
=> (1.0 2.0 3.0) 

多くの場合、実際にはリストを作成する必要はありません。指定された範囲を反復処理したい

(map-iota #'print 3 :start 1 :step 1.0) 
=> 3 

あなたはもちろんLOOPを使用することができ、このようなケースでは::map-iotaもある理由ですcollectもすることができます、

(loop for i from 1.0 below 22 by 1.5 do (print i)) 

代わりのdoとリストを取得します。これはiotaより少し冗長ですが、カスタマイズは簡単です。

+0

私はライブラリを使用することはできません:( –

+0

@ValentinEmilCudelcu次に、ループに依存する独自のユーティリティ関数を定義することができます。特に、開始とステップをカスタマイズしたくない場合は – coredump

0

はまだ私の頭の上のMACのLispを書くことができるかどうか見てみましょう:

(defun foo (num acc) 
    (if (eq num 0) 
     acc 
     (foo (- num 1) (cons num acc)))) 

(foo 5 nil) 

はあなたがどのようなLispの

(1 2 3 4 5) 
+0

数字にEQを使用しないでください。 '(eq 3(+ 2 1))'である。 http://stackoverflow.com/questions/547436/whats-the-difference-between-eq-eql-equal-and-equalp-in-common-lisp – coredump

+0

また、numが負の場合、... – coredump

+0

ちょっとiノスタルジックな気分で楽しんでいた。少なくとも私はrplacdを使用しませんでした –

関連する問題