59 lines
3.0 KiB
Markdown
59 lines
3.0 KiB
Markdown
---
|
||
title: ヘロンの公式(letを使う)
|
||
author: kazu634
|
||
date: 1969-12-31
|
||
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:4335;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
|
||
categories:
|
||
- gauche
|
||
- Lisp
|
||
|
||
---
|
||
<div class="section">
|
||
<p>
|
||
gaucheの勉強は文字列とか入出力の勉強をする前にちょっと寄り道。とりあえず手続き型言語の勉強をして、ソフトウェア開発試験対策とするつもり。Perlで色々やってたらヘロンの公式が出てきたから、それを作ってみるよ。
|
||
</p>
|
||
|
||
<p>
|
||
普通のプログラミング言語のローカル変数がLispではlambdaの仮引数に相当する。それで与えられた引数から、計算用の一時的な変数を用意する必要があるときとかはletを使うと幸せになれる…のだと思う。自分の認識では。ヘロンの公式の場合、
|
||
</p>
|
||
|
||
<p>
|
||
<center>
|
||
</center>
|
||
</p>
|
||
|
||
<p>
|
||
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?S~=~\sqrt{s(s~-~a)(s~-~b)(s~-~c)}" class="tex" alt="S = ¥sqrt{s(s - a)(s - b)(s - c)}" />
|
||
</p>
|
||
|
||
<p>
|
||
ただし
|
||
</p>
|
||
|
||
<p>
|
||
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?s~=~\frac{1}{2}(a~+~b~+~c)" class="tex" alt="s = ¥frac{1}{2}(a + b + c)" />
|
||
</p>
|
||
|
||
<p>
|
||
とする。
|
||
</p></p>
|
||
|
||
<p>
|
||
このsをlet使って表現してあげれば楽ちんに書けるようになるはず(もしもletを使わなければ、sが出てくるたびに「(/ (+ a b c) 2)」を書かなければいけなくなる)。
|
||
</p>
|
||
|
||
<pre class="syntax-highlight">
|
||
gosh> <span class="synSpecial">(</span>define <span class="synSpecial">(</span>heron a b c<span class="synSpecial">)</span>
|
||
<span class="synSpecial">(</span><span class="synStatement">let</span> <span class="synSpecial">((</span>s <span class="synSpecial">(</span><span class="synStatement">/</span> <span class="synSpecial">(</span><span class="synStatement">+</span> a b c<span class="synSpecial">)</span> <span class="synConstant">2</span><span class="synSpecial">)))</span>
|
||
<span class="synSpecial">(</span><span class="synStatement">sqrt</span> <span class="synSpecial">(</span><span class="synStatement">*</span> s <span class="synSpecial">(</span><span class="synStatement">-</span> s a<span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">-</span> s b<span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">-</span> s c<span class="synSpecial">)))))</span>
|
||
heron
|
||
gosh> <span class="synSpecial">(</span>heron <span class="synConstant">3</span> <span class="synConstant">4</span> <span class="synConstant">5</span><span class="synSpecial">)</span>
|
||
<span class="synConstant">6.0</span>
|
||
</pre>
|
||
|
||
<p>
|
||
これで幸せになれたと思う。
|
||
</p>
|
||
</div>
|