第一番（曽根崎）小学校の開校の翌年・ 1875年5月7日には、第一番小学校より分離する形で、 西成郡北野村および川崎村の2村を校区とする西成郡第三区第八番小学校が北野村に創立した。第八番小学校はのちの梅田東小学校にあたる。創立当初の敷地は、太融寺の東隣にあった。第八番小学校は野崎小学校と称し、北野・川崎両村が合同で学校を運営した。北野村・川崎村は1897年の大阪市編入後も、旧両村の地域をひとつの学区として学校運営が一体的になされた。ここでの学区は校区・通学区域のことではなく、「市内を財産負担区域としての学区に分け、小学校にかかる経費は大阪市の直営ではなく学区の財産として運営する」という、大阪市で昭和時代初期まで設置されていた制度（1927年3月廃止）のことを指す。地域の人口の増加により、1901年に旧川崎村を校区とした大阪市川崎尋常小学校（のちの大阪市天満国民学校）を分離し、大阪市北野尋常小学校と称するようになった。1902年には北野尋常小学校より分離する形で、大阪市第二北野尋常小学校（のち北野国民学校）を設置した。また第二北野尋常小学校の開校に伴い、従来の北野尋常小学校は第一北野尋常小学校へと改称している。第一北野尋常小学校は1906年9月、北区北野茶屋町（現在の北区茶屋町）に移転し、1989年の閉校まで同じ場所に校舎があった。北野・川崎学区は1920年、教育勅語の文字から取った済美学区と称することになり、地域内の小学校の名称も一斉に「済美」＋創立順の番号へと変更された。これに伴い第一北野尋常小学校は済美第一尋常小学校、第二北野尋常小学校は済美第三尋常小学校へと改称している。済美学区には6校の小学校が設置されたが、済美学区の6校では1922年、日本で初めて常勤の学校衛生婦を配置している。学校衛生婦は現在の養護教諭制度の源流となっている。済美第三尋常小学校は1928年、北区南扇町（現在の北税務署付近）に移転している。1941年の国民学校令の実施により、済美第一尋常小学校は梅田東国民学校、済美第三尋常小学校は北野国民学校へと改称した。
明治時代初期の学制発布により、西成郡曾根崎村221番地（現在の大阪市北区梅田1丁目、大阪駅前第二ビル付近）に1874年7月24日、西成郡第三区第一番小学校が創立した。この第一番小学校が、のちの曽根崎小学校にあたる。当初は曽根崎村・北野村・川崎村を校区としたが、翌1875年には北野村と川崎村を校区とする第八番小学校（のちの梅田東小学校）を分離している。第一番小学校は西成郡曽根崎尋常小学校と改称し、その後大阪市への編入に伴い大阪市曽根崎尋常高等小学校と称した。曽根崎小学校校舎は現在の梅田1丁目・阪神百貨店南側付近への移転（1895年）を経て、1910年に北区北野小松原町（現在の曽根崎2丁目）に移転した。閉校まで曽根崎2丁目に校舎があった。
回文とは先頭から読んでも、末尾から反対に文字をたどって読んでも、同じ文になるある程度意味の通る文のことである。回文は実用性よりも、文字列操作の練習課題としてしばしば利用される。ここでの定義は回文を生成するのではなく、回文であるかどうかの検査である。ここでは「なかきよのとおのねふりのなふめさめふなのりふねのおとのよきかな」（長き夜の 遠の睡りの 皆目醒め 波乗り船の 音の良きかな）のように、文字の並びを対象とする。回文(_回文) :-        atom_chars(_回文,Chars),        リストの反転(Chars,Chars).一旦組込述語 atom_chars で文字のリストに変換する。ここまではいわば定石のようなものだが、回文の場合はここから、そのリストを反転し、引数が共通であることを示して、反転前と反転後が同じなのが回文であると宣言している。実例はもちろん?- 回文(なかきよのとおのねふりのなふめさめふなのりふねのおとのよきかな).true.?-である。回文にはsub_atom/5を使った定義もある。回文(_回文) :-        forall(sub_atom(_回文,N,1,_,_文字),sub_atom(_回文,_,1,N,_文字)).回文の文字列中の前方からN文字目一文字と後方からN文字目一文字の対はどれも同じ文字になる。そういうことをこの定義では述べている。これも細部を述べながら、かつ、宣言性を維持した美しい定義である。ただし、中間点まで確かめたならば回文と決定できるはずだが、ここでは全文を走査してしまっている。中間点で打ち切る定義は、sub_atom/5の第二、第四引数を比較する。回文(_回文) :-        forall((sub_atom(_回文,N,1,R,_文字),N =< R),sub_atom(_回文,_,1,N,_文字)).forall/2これで第一引数の走査が中間点に達すると第二引数の走査はしなくなる。これで中間点を過ぎるとN >= Rが偽となるから第二引数のsub_atom(_回文,_,1,N,_文字)の検査には進まなくなる。しかし、forall/2の第一引数のsub_atom/5の方は最後まで走査されてしまう。この問題も解決しようとすると、回文(_回文) :-        forall((sub_atom(_回文,N,1,R,_文字),N =< R; !,fail),sub_atom(_回文,_,1,N,_文字).これで中間点に達すると!,failが働いて、sub_atom/5へのバックトラックは止まる。しかし、; !,failの部分は、複雑で宣言性を損ねる記述になっている。forall/2の中の副目標の述語名がsub_atomに統一できなくなっている点でも、読み易さを損ねている。カットの説明を参照されたいが、ここでのN =< R; !,failを独立した副目標として定義し直すことは、カットの有効範囲の関係からできない。このような場合、日本語で解説して行くようなつもりで、冗長な述語表現を取ると上手く行く。回文(_回文) :-        回文とは中間点まで先頭からN文字目と末尾からN文字目の文字が同一の文字列である(_回文).回文とは中間点まで先頭からN文字目と末尾からN文字目の文字が同一の文字列である(_回文) :-        forall(中間点までのN文字目(_回文,N,_文字),末尾からN文字目(_回文,N,_文字)).中間点までのN文字目(_回文,N,_文字) :-        sub_atom(_回文,N,1,R,_文字),N =< R; !,fail.末尾からN文字目(_回文,N,_文字) :-        sub_atom(_回文,_,1,N,_文字).この方がずっと宣言的で明解な表現になっている。