99 lines
6.8 KiB
Markdown
99 lines
6.8 KiB
Markdown
|
---
|
|||
|
title: 等価性
|
|||
|
author: kazu634
|
|||
|
date: 2008-08-04
|
|||
|
url: /2008/08/04/_1063/
|
|||
|
wordtwit_post_info:
|
|||
|
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4187;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
|
|||
|
categories:
|
|||
|
- gauche
|
|||
|
- Lisp
|
|||
|
|
|||
|
---
|
|||
|
<div class="section">
|
|||
|
<p>
|
|||
|
「二つのオブジェクトAとBが等しいとはどういうことでしょうか?」これには色々な意味があるよ。
|
|||
|
</p>
|
|||
|
|
|||
|
<h4>
|
|||
|
内容が同じという場合
|
|||
|
</h4>
|
|||
|
|
|||
|
<p>
|
|||
|
二つのリストがあった場合、それぞれの要素を順に比較し、全て等しければ元のリストも等しいという立場での比較。
|
|||
|
</p>
|
|||
|
|
|||
|
<pre class="syntax-highlight">
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">equal</span>? <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synConstant">1</span> <span class="synConstant">2</span> <span class="synConstant">3</span><span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synConstant">1</span> <span class="synConstant">2</span> <span class="synConstant">3</span><span class="synSpecial">))</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">equal</span>? <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synConstant">1</span> <span class="synConstant">2</span> <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synConstant">3</span> <span class="synConstant">4</span><span class="synSpecial">)</span> <span class="synConstant">5</span><span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">cons</span> <span class="synConstant">1</span> <span class="synSpecial">(</span><span class="synStatement">cons</span> <span class="synConstant">2</span> <span class="synSpecial">'((</span>3 4<span class="synSpecial">)</span> . <span class="synSpecial">(</span>5<span class="synSpecial">)))))</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">equal</span>? <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synConstant">1</span> <span class="synConstant">2</span> <span class="synConstant">3</span><span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synConstant">1</span> <span class="synConstant">2</span> <span class="synConstant">4</span><span class="synSpecial">))</span>
|
|||
|
#f
|
|||
|
</pre>
|
|||
|
|
|||
|
<h4>
|
|||
|
入れ物が同じ
|
|||
|
</h4>
|
|||
|
|
|||
|
<p>
|
|||
|
他の値を入れておく入れ物の同一性を調べるもの。C言語を知っている人は、eq?はオブジェクトの「アドレス」を比較していると考えていい。
|
|||
|
</p>
|
|||
|
|
|||
|
<pre class="syntax-highlight">
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">eq</span>? <span class="synSpecial">(</span><span class="synStatement">cons</span> <span class="synConstant">1</span> <span class="synConstant">2</span><span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">cons</span> <span class="synConstant">1</span> <span class="synConstant">2</span><span class="synSpecial">))</span>
|
|||
|
#f
|
|||
|
gosh> <span class="synSpecial">(</span>define p <span class="synSpecial">(</span><span class="synStatement">cons</span> <span class="synConstant">1</span> <span class="synConstant">2</span><span class="synSpecial">))</span>
|
|||
|
p
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">eq</span>? p p<span class="synSpecial">)</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
</pre>
|
|||
|
|
|||
|
<h4>
|
|||
|
数値として同じ
|
|||
|
</h4>
|
|||
|
|
|||
|
<p>
|
|||
|
数値として比較する場合。
|
|||
|
</p>
|
|||
|
|
|||
|
<pre class="syntax-highlight">
|
|||
|
gosh> <span class="synSpecial">(</span>eqv? <span class="synConstant">1</span> <span class="synConstant">1</span><span class="synSpecial">)</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span>eqv? <span class="synConstant">1.0</span> <span class="synConstant">1.0</span><span class="synSpecial">)</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span>eqv? <span class="synConstant">1</span> <span class="synConstant">1.0</span><span class="synSpecial">)</span>
|
|||
|
#f
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">=</span> <span class="synConstant">1</span> <span class="synConstant">1.0</span><span class="synSpecial">)</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">char=</span>? #\a #\a<span class="synSpecial">)</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">char=</span>? #\a <span class="synType">#\A</span><span class="synSpecial">)</span>
|
|||
|
#f
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">string=</span>? <span class="synConstant">"abc"</span> <span class="synConstant">"abc"</span><span class="synSpecial">)</span>
|
|||
|
#<span class="synStatement">t</span>
|
|||
|
gosh> <span class="synSpecial">(</span><span class="synStatement">string=</span>? <span class="synConstant">"abc"</span> <span class="synConstant">"ABC"</span><span class="synSpecial">)</span>
|
|||
|
#f
|
|||
|
</pre>
|
|||
|
|
|||
|
<blockquote>
|
|||
|
<ul>
|
|||
|
<li>
|
|||
|
「gauche」に関連する最近のエントリ <ul>
|
|||
|
<li>
|
|||
|
<a href="http://d.hatena.ne.jp/sirocco634/20080803/1217768505" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20080803/1217768505', ' 複数の引数をとる手続きだよ – 武蔵の日記');" target="_blank"> 複数の引数をとる手続きだよ – 武蔵の日記</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="http://d.hatena.ne.jp/sirocco634/20080802/1217685822" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20080802/1217685822', ' 『プログラミングGauche』の勉強 – 武蔵の日記');" target="_blank"> 『プログラミングGauche』の勉強 – 武蔵の日記</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="http://d.hatena.ne.jp/sirocco634/20080729/1217342129" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20080729/1217342129', ' lambdaでてきた – 武蔵の日記');" target="_blank"> lambdaでてきた – 武蔵の日記</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="http://d.hatena.ne.jp/sirocco634/20080727/1217160745" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20080727/1217160745', ' Hello world! – 武蔵の日記');" target="_blank"> Hello world! – 武蔵の日記</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</blockquote>
|
|||
|
</div>
|