[解決済み] Common Lispのeq, eql, equal, equalpの違いは何ですか?
2023-07-30 02:36:58
質問
とはどう違うのでしょうか?
eq
,
eql
,
equal
と
equalp
は、Common Lisp ではどうなのでしょうか? 型をチェックするもの、型をまたいでチェックするもの、いろいろあるのはわかるのですが、どれがどれなのでしょうか? どのような場合に他よりも1つを使用するのが良いですか?
どのように解決するのですか?
<ブロッククオート
(eq x y)
は以下の場合にのみ真となります。
x
であり
y
は同じ同一のオブジェクトです。
は
eql
述語は、その引数が
eq
であるか、同じ値を持つ同じ型の数字であるか、同じ文字を表す文字オブジェクトである場合、真となります。
は
equal
述語は、その引数が構造的に似ている(同型の)オブジェクトであれば真です。大まかな経験則は、2つのオブジェクトは、それらの印刷表現が同じである場合にのみ、等しいということです。
二つのオブジェクトは
equalp
である場合、文字である場合、アルファベットの大文字とその他の文字の属性を無視する char-equal を満たす場合、数字である場合、異なる型であっても同じ値を持つ場合、または構成要素がすべて
equalp
.
上にリンクしたのと同じページからの例です。
(eq 'a 'b) is false.
(eq 'a 'a) is true.
(eq 3 3) might be true or false, depending on the implementation.
(eq 3 3.0) is false.
(eq 3.0 3.0) might be true or false, depending on the implementation.
(eq #c(3 -4) #c(3 -4))
might be true or false, depending on the implementation.
(eq #c(3 -4.0) #c(3 -4)) is false.
(eq (cons 'a 'b) (cons 'a 'c)) is false.
(eq (cons 'a 'b) (cons 'a 'b)) is false.
(eq '(a . b) '(a . b)) might be true or false.
(progn (setq x (cons 'a 'b)) (eq x x)) is true.
(progn (setq x '(a . b)) (eq x x)) is true.
(eq #\A #\A) might be true or false, depending on the implementation.
(eq "Foo" "Foo") might be true or false.
(eq "Foo" (copy-seq "Foo")) is false.
(eq "FOO" "foo") is false.
(eql 'a 'b) is false.
(eql 'a 'a) is true.
(eql 3 3) is true.
(eql 3 3.0) is false.
(eql 3.0 3.0) is true.
(eql #c(3 -4) #c(3 -4)) is true.
(eql #c(3 -4.0) #c(3 -4)) is false.
(eql (cons 'a 'b) (cons 'a 'c)) is false.
(eql (cons 'a 'b) (cons 'a 'b)) is false.
(eql '(a . b) '(a . b)) might be true or false.
(progn (setq x (cons 'a 'b)) (eql x x)) is true.
(progn (setq x '(a . b)) (eql x x)) is true.
(eql #\A #\A) is true.
(eql "Foo" "Foo") might be true or false.
(eql "Foo" (copy-seq "Foo")) is false.
(eql "FOO" "foo") is false.
(equal 'a 'b) is false.
(equal 'a 'a) is true.
(equal 3 3) is true.
(equal 3 3.0) is false.
(equal 3.0 3.0) is true.
(equal #c(3 -4) #c(3 -4)) is true.
(equal #c(3 -4.0) #c(3 -4)) is false.
(equal (cons 'a 'b) (cons 'a 'c)) is false.
(equal (cons 'a 'b) (cons 'a 'b)) is true.
(equal '(a . b) '(a . b)) is true.
(progn (setq x (cons 'a 'b)) (equal x x)) is true.
(progn (setq x '(a . b)) (equal x x)) is true.
(equal #\A #\A) is true.
(equal "Foo" "Foo") is true.
(equal "Foo" (copy-seq "Foo")) is true.
(equal "FOO" "foo") is false.
(equalp 'a 'b) is false.
(equalp 'a 'a) is true.
(equalp 3 3) is true.
(equalp 3 3.0) is true.
(equalp 3.0 3.0) is true.
(equalp #c(3 -4) #c(3 -4)) is true.
(equalp #c(3 -4.0) #c(3 -4)) is true.
(equalp (cons 'a 'b) (cons 'a 'c)) is false.
(equalp (cons 'a 'b) (cons 'a 'b)) is true.
(equalp '(a . b) '(a . b)) is true.
(progn (setq x (cons 'a 'b)) (equalp x x)) is true.
(progn (setq x '(a . b)) (equalp x x)) is true.
(equalp #\A #\A) is true.
(equalp "Foo" "Foo") is true.
(equalp "Foo" (copy-seq "Foo")) is true.
(equalp "FOO" "foo") is true.
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] PHPの文字列で、シングルクオートとダブルクオートの違いは何ですか?
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み] Javaで文字列を比較するには?
-
[解決済み] Javaにおける==とequals()の違いは何ですか?
-
[解決済み] と "is "は違うのですか?
-
[解決済み] イコール、エクル、==、==の違いは何ですか?
-
[解決済み] "=>"の意味は?(JavaScriptでは、等号と大文字からなる矢印を使用することができますか?
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み] 様々な言語のコードをシンタックスハイライトするためのLaTeXパッケージ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] にはどんな意味があるんだろう?
-
[解決済み] なぜ"||"は "or "の記号なのですか?[クローズド]
-
[解決済み] OCamlにおける`and`キーワードの意味とは?
-
[解決済み] IFステートメントを使用しているときに、シェルコマンドを複数行に分割するにはどうすればよいですか?
-
[解決済み] Kotlinの変数名前アスタリスク演算子またはSpread演算子
-
[解決済み] 括弧、ドット、中括弧、=(関数)などを省略できる場合の正確なルールを教えてください。
-
[解決済み] Go言語における代入演算子
-
[解決済み] 番号付きリストのコードブロック (Wiki構文)
-
[解決済み] Gherkinでコメントをブロックするには?
-
セマンティクスとシンタクスは同じなのか?