今日のテーマ絵

nadesi.com
プログラム言語「なでしこ」のプログラムはプログラム貯蔵庫で実行できます
🍯 プログラム貯蔵庫
※ この記事はなでしこv3.7.20のころ書かれたものです
なでしこの命令と引数と助詞の関係について
プログラミング言語「なでしこ」では命令の引数に助詞を付けます。
以下のプログラムでは命令置換は3つの引数をとりの, を, にが助詞にあたります
//なでしこ3
「こんにちは」の「にち」を「ばん」に置換 //→こんばんは
//(引数+助詞),(引数+助詞),(引数+助詞),命令 という構造
プログラム言語の名前付き引数の特徴を検索してみると
といったことが挙げられます。
なでしこ3の助詞は同様の特徴を持っており、助詞はほかのプログラム言語でいう名前付き引数(キーワード引数)にあたる と言ってよいと思います
なでしこ3の助詞一覧
なでしこ3で使用できる文法上の助詞は以下のものであると定義されています
※ なでしこv3.7.20時点
について,くらい,なのか,までを,までの,による,として,とは,から,まで,
だけ,より,ほど,など,いて,えて,きて,けて,して,って,にて,みて,
めて,ねて,では,には,んで,ずつ,
は,を,に,へ,で,と,が,の,でなければ,なければ,ならば,なら,たら,れば,
こと,である,です,します,でした,にゃん
用途はいくつかのグループにわかれています
- 関数の引数につかうもの(
を, に, へ, で, と, が, の, から, まで, にはなど)
- 文法的な意味を持つもの(
は, には, して, ならば, でなければなど)
- 意味はなくプログラム文のかざりになるもの(
です, でした, にゃんなど)
これ助詞だっけ?と感じるものもあるかもしれませんが、日本語の助詞には格助詞・接続助詞・終助詞などが含まれるにゃん(←終助詞)
(余談)読点の省略
なでしこ以外のプログラム言語に慣れていて、なでしこのプログラム文が不思議に感じる方は助詞の後ろに読点をつけてみるとよいでしょう。
「こんにちは」の、「にち」を、「ばん」に、置換
「、」は文法上の区切り位置になります。ほかの言語でいう、.や, や (半角スペース)と同様です
なでしこの前身である「日本語プログラミング言語ひまわり」では読点が必須でしたが、なでしこでは助詞につける読点が省略可能になりました。(省略せずに「、」を書いても動きます)
もしかしたら、この省略によって単語の区切り位置が一見分かりにくい不思議な言語に見られるようになっってしまったのかもしれません。
なでしこの文法に慣れている人は 助詞が区切り位置に見えています。
なでしこv1付属のエディタ
というのも、なでしこv1に付属してるエディタでは助詞にしっかり色がつくのです(画像はダークモード)
ほかのプログラム言語との比較
関数に引数を渡す様子をほかのプログラム言語と比較してみます
名前付き引数なしの場合
引数は順番で役割が固定されるプログラム言語では置換(S, A, B)のようになります。
何番目の引数が何の役割か、不安を覚えます。
引数が増えると地獄です。
名前付き引数ありの別言語の場合
プログラム言語によっては 名前付き引数 が導入されています
Range("A1:A100").Replace What:="にち", Replacement:="ばん"`
VBAでは What:=やReplacement:=が引数を指定している部分です。
AIにパイソンで書いたらどうなるのと聞いたところ、こう返ってきました
def replace_all(*, text, old, new):
return text.replace(old, new)
result = replace_all(text="こんにちは", old="にち", new="ばん")
print(result) # → こんばんは
標準の関数は名前付き引数がついていないため、関数定義で実装するようです。
text=、old=、new=が引数を指定している部分のようです。
比較
これまでの例をならべて見ましょう
//C言語ほか
置換(S, A, B)
' VBA
Range("A1:A1").Replace What:="にち", Replacement:="ばん"
# Python
replace_all(text="こんにちは", old="にち", new="ばん")
※ なでしこ
「こんにちは」の「にち」を「ばん」に置換
なでしことパイソンを比較すると画像のようになります。
対応する部分
おまけ:AIに聞いてみた
プログラム言語ではなく通常の英語で「SのAをBに置換する」はどのように書きますかと尋ねたところ
Replace A with B in S.
と返ってきました。
これがそのまま動くプログラム言語はありますかって聞いたらAppleScriptとCOBOLが近いと返ってきました
・AppleScript
set newText to replace "A" with "B" in S
・COBOL
INSPECT S REPLACING ALL A BY B.
前置詞by, to, with, inなどをなでしこの助詞みたいにすればよかったんじゃないの?
英語圏民はなんでこれ発展させていかなかったの?