level 13
雾雨魔理沙㊣
楼主
动的なデータの并び
数値や文字など、LISP で扱うことができる何らかのデータをまとめてリストとして管理することができます。 リストは、一般的なプログラミング言语における配列のようなものだと思って良いですが、LISP 言语には明确に配列という机能も存在するため、リストと配列は异なります。 LISP のリストは、近年のオブジェクト指向型フレームワークにおける动的配列やイテレータのような、顺次アクセス型の动的なデータ并びに近い存在です。
リストも LISP が扱う一つのデータ型で、组み込み関数 list で定义することができます。
list &rest args
この関数の引数には、リストのデータ并びに指定する任意のデータを指定します。 このとき、リストに配置される各々のデータを要素と呼びます。 例えば (list 10 20 30) とあった场合、数値 10、20、30 がリストの要素となるのです。
> (list 1 2 3 4 5)
(1 2 3 4 5)
このように、list 関数でリストを定义すると、システムは括弧 ( ) で括ってリストを表示します。 リストも一つのデータなので、リストの要素にリストを指定することも可能です。
> (list (list 1 2 3) (list 10 20 30) 100 200 300)
((1 2 3) (10 20 30) 100 200 300)
このリストの第一要素と第二要素は、同じく list 関数で作成されたリスト型のデータになっています。 このように、様々なデータ型をリストとして并べることができるので、リストは柔软にデータを扱うための重要な存在です。
list 関数に値の列を送ることでリストを得ることができましたが、quote 特别式にリスト表记を指定することで式を评価しないリストを得ることもできます。
quote object
この式は、変数を使うために记号型の値を作成するときに使いました。 実は、quote は引数に渡されたデータを评価せずに値として返すという性质を持つ特别式なのです。 そのため、x や sakura という识别子を渡すと、そのまま x や sakura という记号を评価せずに返したのです。
LISP のデータ构造に惯れていない手続き型思考のプログラマには、この概念は难しく感じるかもしれません。 例えば (1 2 3) という表记はリスト表记ですが、これをシステムが実行すると 1 という関数に引数 2 と 3 を渡すものだと评価されてしまうのです。 同様に、変数 x が 10 という値を保存している场合 (set x 20) は変数 x に 20 を代入するのではなく、(set 10 20) と评価されてしまうのです。
これを逆に考え、quote は引数に渡したデータを评価しないという特别式であるということを认识すると、quote の本质的な意味が理解できます。 (quote x) は x を评価するのではなく、システムが认识できる直接の记号 x を返していたのです。 システムはリストを括弧で括ったデータ列として认识するため quote に ( ) 表记のデータを渡せば、それを评価せずにリストとして返すということになります。
> (quote (10 20 30))
(10 20 30)
> '(10 20 30)
(10 20 30)
これは、リスト表记のデータを quote 特别式に指定することでリストを作成した例です。 quote は ' で省略表记できたので、(quote (10 20 30)) は '(10 20 30) でも同じです。
くどく言いますが、list 関数と quote 特别式の违いは、式を评価するかどうかです。 list 関数は引数に指定された任意の个数のデータを受け取り、それをリストに変换して返します。 このとき、list 関数を実行した时点で引数は评価されています。 一方 quote は评価されません。
> (setq x 10 y 20 z 30)
30
> (list x y z)
(10 20 30)
> (quote (x y z))
(X Y Z)
これは、setq で初期化した変数 x、y、z をリストの各要素に指定した场合の例です。 list 関数の场合の结果は明白で、関数実行时に x、y、z 记号が评価され、変数に格纳されている値がリストの要素となります。 一方の quote は (x y z) が评価されずに、记号がそのままリストの要素となります。
--------------------------------------------------------------------------------
2011年11月04日 12点11分
1
数値や文字など、LISP で扱うことができる何らかのデータをまとめてリストとして管理することができます。 リストは、一般的なプログラミング言语における配列のようなものだと思って良いですが、LISP 言语には明确に配列という机能も存在するため、リストと配列は异なります。 LISP のリストは、近年のオブジェクト指向型フレームワークにおける动的配列やイテレータのような、顺次アクセス型の动的なデータ并びに近い存在です。
リストも LISP が扱う一つのデータ型で、组み込み関数 list で定义することができます。
list &rest args
この関数の引数には、リストのデータ并びに指定する任意のデータを指定します。 このとき、リストに配置される各々のデータを要素と呼びます。 例えば (list 10 20 30) とあった场合、数値 10、20、30 がリストの要素となるのです。
> (list 1 2 3 4 5)
(1 2 3 4 5)
このように、list 関数でリストを定义すると、システムは括弧 ( ) で括ってリストを表示します。 リストも一つのデータなので、リストの要素にリストを指定することも可能です。
> (list (list 1 2 3) (list 10 20 30) 100 200 300)
((1 2 3) (10 20 30) 100 200 300)
このリストの第一要素と第二要素は、同じく list 関数で作成されたリスト型のデータになっています。 このように、様々なデータ型をリストとして并べることができるので、リストは柔软にデータを扱うための重要な存在です。
list 関数に値の列を送ることでリストを得ることができましたが、quote 特别式にリスト表记を指定することで式を评価しないリストを得ることもできます。
quote object
この式は、変数を使うために记号型の値を作成するときに使いました。 実は、quote は引数に渡されたデータを评価せずに値として返すという性质を持つ特别式なのです。 そのため、x や sakura という识别子を渡すと、そのまま x や sakura という记号を评価せずに返したのです。
LISP のデータ构造に惯れていない手続き型思考のプログラマには、この概念は难しく感じるかもしれません。 例えば (1 2 3) という表记はリスト表记ですが、これをシステムが実行すると 1 という関数に引数 2 と 3 を渡すものだと评価されてしまうのです。 同様に、変数 x が 10 という値を保存している场合 (set x 20) は変数 x に 20 を代入するのではなく、(set 10 20) と评価されてしまうのです。
これを逆に考え、quote は引数に渡したデータを评価しないという特别式であるということを认识すると、quote の本质的な意味が理解できます。 (quote x) は x を评価するのではなく、システムが认识できる直接の记号 x を返していたのです。 システムはリストを括弧で括ったデータ列として认识するため quote に ( ) 表记のデータを渡せば、それを评価せずにリストとして返すということになります。
> (quote (10 20 30))
(10 20 30)
> '(10 20 30)
(10 20 30)
これは、リスト表记のデータを quote 特别式に指定することでリストを作成した例です。 quote は ' で省略表记できたので、(quote (10 20 30)) は '(10 20 30) でも同じです。
くどく言いますが、list 関数と quote 特别式の违いは、式を评価するかどうかです。 list 関数は引数に指定された任意の个数のデータを受け取り、それをリストに変换して返します。 このとき、list 関数を実行した时点で引数は评価されています。 一方 quote は评価されません。
> (setq x 10 y 20 z 30)
30
> (list x y z)
(10 20 30)
> (quote (x y z))
(X Y Z)
これは、setq で初期化した変数 x、y、z をリストの各要素に指定した场合の例です。 list 関数の场合の结果は明白で、関数実行时に x、y、z 记号が评価され、変数に格纳されている値がリストの要素となります。 一方の quote は (x y z) が评価されずに、记号がそのままリストの要素となります。
--------------------------------------------------------------------------------