# FAQ - 文法編

## 一行に一命令しか書かないのはなぜ？

> サンプルのプログラムを見ると、一行に一命令しか書いてないけど、日本語の文章みたいに、つなげて書くことは出来ないの？

> いえいえ、日本語のように、各命令を「。」で区切れば、いくつでも命令を書くことが出来ます。ただし、プログラムを、文章のように書いてしまうと、プログラムが見づらくなります。もし、間違ったプログラムを書いてしまったときに、誤りを見つけるのが難しくなります。プログラムは、出来る限り見やすく、分かりやすく書くことが重要です。

## 他のプログラム言語の関数みたいには書けないの？

> 昔、BASICをちょっとかじったことがあるんだけど、BASICって、「変数＝関数名(引数,引数)」みたいな書き方が出来るよね。ひまわりはそんな風に書けないの？

> 書けます。『適当な数＝乱数（１０）』と、書けば、変数『適当な数』に、０〜９のどれかの乱数が得られます。

## どうして、単語ごとに句点「、」で区切らなければいけないの？

> 最近、ひまわりの、プログラムの、点の、打ち方に、慣れてしまって、文章を、書くとき「、」が多くなって、しまいます。どうして、「、」で、単語を、区切らないといけないの？改良できないの？

> 日本語の曖昧さ（＝文脈の誤訳）を排除するため、プログラムを単純に保つため、と、難しい問題をクリアするために、文節で区切ることが、必要でした。今後、本来の日本語の意味を解釈して実行できるようなプログラム言語も開発されると思いますが、現段階では、プログラムの実行速度が遅くなって、実用的でないので、このような形に落ち着いています。

## 命令を実行したが正しい結果が得られない。

> 以下のプログラムの通貨形式に変換が、上手くいきません。

> ’誤りのあるプログラム 計算結果 = 5000 + 2000。 計算結果を、通貨形式に変換。 「計算結果は｛計算結果｝です」と、表示。

> これは、ひまわり独特のクセによるものです。ひまわりは、命令を実行すると、特殊変数の「それ」に答えを返すという特徴があります。よって、上のプログラムを正しく書き直すと、以下のように書かなければなりません。

> ’正しいプログラム 計算結果 = 5000 + 2000。 計算結果を、通貨形式に変換。 「計算結果は｛それ｝です」と、表示。’←変更箇所

> ＢＡＳＩＣや、他の言語を知っている人には、そんなのおかしいと思うかもしれませんが、ひまわりでは、この方が一般的です。ですが、どうしても嫌だと思ったら、普通のプログラム言語のように、以下のように書くことも出来ます。どの書き方が良くて、どの書き方が悪いというのは、ありませんので、読みやすい書き方で書いてください。

> ’BASICや、C言語風なプログラム 計算結果 = 通貨形式に変換(5000 + 2000)。 「計算結果は｛計算結果｝です」と、表示。'←変更箇所

> それについての解説は、「それ」について学ぶを参照してください。

## 「」と『』は、どう違うの？

> 「」と、『』は、違うものなのなの？また、以下のプログラムで、変数Aの内容が表示されません。

> ’正しくないプログラム 変数A＝７７７ 『答えは、｛変数A｝』と、言う。

> 「」と、『』は、違うものです。「」の中では、変数名を｛｝で括ると、その内容を展開しますが、『』の中では、｛｝を、展開しません。マニュアルの、文字列展開の規則を見てください。→文字列について

## 配列変数の最後に値を追加したい

> 配列変数に値を追加したいのだけど、どうやったらいいの？

> ひまわりの配列は、ＣＳＶ形式、つまり文字列で管理されています。そのため、配列変数の最後に値を追加した場合は、以下のように書くと最後へ値を追加できます。

> 配列A#0=「０行目」 配列A#1=「１行目」 配列A#2=「２行目」 配列A=配列A&「３行目\ｎ」 配列Aと、言う。

> また、要素数を調べ、その番号に書き込む方法もあります。

> 配列A#0=「０行目」 配列A#1=「１行目」 配列A#2=「２行目」 CNT=要素数(配列A)。 配列A#CNT=「追加した行」 配列Aを、表示。

## 配列変数で、先頭に空白文字を入れたい

> 配列変数へ、『配列変数#0=「　　　test」』のように書いても、先頭の半角空白文字がトリムされてしまう。どうして？対処方法は？

> ひまわりの配列は、ＣＳＶ形式なので、配列から値を得る時には、余分なスペースは、トリムしてしまうという機能があります。考えようによっては、お節介な機能ですが、便利な場合が多いので、こういう仕様になっています。
> 全角文字の空白を使うか、適当な、"_"のような記号にしておいて、出力時に、置換する方法もあります。
> 裏技としては、配列を使わないで、擬似配列変数を使う方法もあります。

> 擬似配列番号＝3 変数の値＝「　　　　test」 「変数名｛擬似配列番号｝＝｛値｝。」を、ひまわりする。

## 自動処理の最中に出るエラーをなんとかしたい。

> 夜中に大量のファイル変換の自動処理をさせているのだが、時々、プログラムのエラーが発生する。なんとか、エラーをスキップさせる方法はないか。

> ひまわりには、エラー処理機構がついていますので、それを利用するか、プログラムの開始時に『エラーを無視』と書いておけば、エラーを無視して実行を継続します。