blog/content/post/1970/01/01/1970-01-01-00000021.md

59 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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&#40;s~-~a&#41;&#40;s~-~b&#41;&#40;s~-~c&#41;}" class="tex" alt="S = ¥sqrt{s&#40;s - a&#41;&#40;s - b&#41;&#40;s - c&#41;}" />
</p>
<p>
ただし
</p>
<p>
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?s~=~\frac{1}{2}&#40;a~+~b~+~c&#41;" class="tex" alt="s = ¥frac{1}{2}&#40;a + b + c&#41;" />
</p>
<p>
とする。
</p></p>
<p>
このsをlet使って表現してあげれば楽ちんに書けるようになるはずもしもletを使わなければ、sが出てくるたびに「(/ (+ a b c) 2)」を書かなければいけなくなる)。
</p>
<pre class="syntax-highlight">
gosh&#62; <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&#62; <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>