printを含む文があると、副作用あり、と言うみたいです。一方greeting2みたいに、値を返すことが関数プログラミングに通じる、と感じました。returnは要らないと、指示されました。文字列を返すので、printlnの引数に出来る。もう一個アドバイスがありますが、strは固定した文字列と言うものでした。
出力の順番で、面食らいました。なんと下から実行されてます。ネタ本を見ると、{ }の組み合わせが違ってました。ネタ本の通りだと下です。でもこれはどう考えれば良いんでしょうか?
上の通りであれば、何となくわかります。通常は{ }の部分はブロックとか言って、連続実行されますよね。例題の意味は、Listの作り方です。ScalaのListはイミュータブル、変更不可と言うことです。
上は最終的な結果ですが、結構長い道のりがありました。もともとG3はドスパラからのWindows10 Homeが入っていた中古です。最近はインストールDVDが付いていないものが普通のようです。UEFIとかでその知識もほぼ皆無です。再インストールしたときに、WindowsのエリアもフォーマットしたようでWindows10が立ち上がらなくなってしまいました。Ubuntuならインストール出来たので、したのが面倒の始まりでした。今考えると。
一度Ubuntuをインストールすると、HDDがLinuxようのフォーマットされますので、Windows10の起動DVDからはインストールできません。パーティションを作って、Windowsのエリアを作っておけばよかったのかもしれません。
LAN上のHDDのNASがあって、それにイメージのバックアップをしてました。今まで成功したことがなかったのですが、たまたまあったUSBからのWindowsのインストールデバイスからNASからのイメージをCドライブに直に移せましたが、認証ができません。Galleria1のイメージを復元したので、使えなくなりました。マイクロソフトでチェックしてるんですね。
今度はWindowsのエリアができたので、認証番号を入れて、インストール。認証番号によってHomeかProが決まるようです。もちろん64ビットです。UEFIですか?それがよく分かっていないこともあるのですが、起動時にAsrockの文字とBIOSの設定に行けない時があります。どおしてもダメなときはCMOSクリアすると良いようですが、これがちょっと面倒です。(苦)
Arrayはミュータブル(変更可能)、Listはイミュータブル(変更不可)。ListをprintlnするとList(1, 2, 3)と表示されるが、Arrayだとprintln(numbers)とするとアドレス見たのが1個表示される。例えば上の例でArray(1,2,3)と表示される方法はあるんだろうか?
Arrayを使うと、3行目のように単純に書ける。この場合は、文字列の配列として作られるようです。Scalaは手続き型でも関数型でも書ける特徴があるようです。関数型を使う人はインデックスを使うのが嫌いというか?そもそもデータを書き換えるのを行わないようです。foreachでは確かにインデックスは有りませんが、この場合はxという関数の引数みたいのが使われてます。
Scala第3版は難しいことを書いてますので、何処まで理解できるか?以前も途中で投げてました。サンプルが本と一致してなくて、前回も悩んでました。ゆっくりと進みたいと思います。
2023年あけましておめでとうございます。
答えが分数で出てますが、小数点付きにも、直せるんでしょうね。勿論。lambdaはなかなか馴染めないので、barを注目ですが、sum関数の因数にFractionがあります。これが高階関数なんでしょうか?コメントアウトしている2行や4行と酷似です。コメントアウトの部分は、リスト内包記法の確認してました。勉強か休んでいたか?
独習C#第3版によれば、メソッドによってはデリゲートを介してのみ呼び出す場合がある。わざわざメソッドを一つの独立したものとして定義する必要が無い、と書いてますが。(匿名メソッドの例のリンクを張っておきます。)
using System;
namespace Chapter01All
{ class NigenAry
{
int[,] ary;
public NigenAry(int r, int c)
{
ary = new int[r, c];
}
public int this[int indexr, int indexc]
{
get
{
return ary[indexr, indexc];
}
set
{
ary[indexr, indexc] = value;
}
}
}
class NigenAryIndex
{
static void Main()
{
int r = 5; int c = 10;
NigenAry obj = new NigenAry(r, c);
for(int i=0; i<r * c; i++)
{
obj[i / c, i % c] = i;
}
for (int i = 0; i < r * c; i++)
{
if (i % c == 0)
Console.WriteLine();
Console.Write(obj[i / c, i % c] + " ");
}
Console.WriteLine();
}
}
}
インデクサを使った配列は、インプリメントな(例えばint)配列とは違います。がこの場合は非常に似ているので、混乱しそうです。後から見比べてみます。
VS2019のコードをコピペして見ました。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Chapter01All
{
class BubbleSortString
{
static void Main()
{
string[] strs = { "99", "-10", "100123", "18", "-978",
"5623", "463", "-9", "287", "49" };
int a, b; string t;
int size;
size = 10; // ソート対象の要素数
// ソート前の配列要素を表示
Console.Write("Original array is:");
for (int i = 0; i < size; i++)
Console.Write(" " + strs[i]);
Console.WriteLine();
// バブルソート
for (a = 1; a < size; a++)
for (b = size - 1; b >= a; b--)
{
if (strs[b - 1].CompareTo( strs[b]) > 0)
{ // もし大小関係が逆ならば
// 要素の交換
t = strs[b - 1];
strs[b - 1] = strs[b];
strs[b] = t;
}
}
// ソート後の要素を表示
Console.Write("Sorted array is:");
for (int i = 0; i < size; i++)
Console.Write(" " + strs[i]);
Console.WriteLine();
}
独習C#第3版のP198の課題7の答えです。それをコピペしました。前は、コードは化けてしまうと思っていましたが、これは大丈夫そうです。
上の方のピンクの活字の部分は、オブジェクトらしくない感じですが、下の方を見るとオブジェクトらしい書き方です。課題の元ネタは、単なるintの配列ですので、比較の部分は">”です。一時的に保存しておくところも、変わってます。string tとなってます。
isortがあまりに見事なので、良く分からい自分が情けない。"(-""-)"でも使うだけで良いのであれば、.sortWithで簡単に?書けます。
コップ本P296の説明
このアルゴリズムは、空でないリストx::xsをソートするために、xsをソートしてから、先頭要素のxを適切な位置に挿入する。空リストをソートしたときは、空リストが作られる。と簡単に書いてます。"(-""-)"
リストは面白そうなので、「Scalaスケーラブルプログラミング第三版」に戻ります。解説によれば
リストと配列は非常に似ているが、違いが2つある。リストは第一にイミュータブルである。つまりリストの要素は代入によって書き換えられない。第二に配列はフラットだが、リストは再帰的な構造(連結リスト:linked list)を持つ。
前にもやった例題ですが、Keisan[String]の部分を追加してみました。
abcdefと文字列が繋がっています。
ミスプリントを発見したのはP80の中ほど、devide( 10 / n)は間違いで、devide(10, n)が正解です。訂正にもなかったので連絡しましたが、まだ訂正されてはいないようです。2019/06/10現在。この本は初版なんで間違いも多い様です。
new Demoでval xが確保されるようです。
new Demoではxが確保されないようです。obj.xで確保されるようです。