ChatGPTに構文と慣習について説明を書かせた
ChatGPTに構文と慣習について説明を書かせる
nishio.icon
「構文だったり慣習だったりする」という例としてLISPのハテナとかRubyの大文字とかPythonのアンダースコアとかについて解説できますか?
ChatGPT.icon
LISP、Ruby、Pythonといったプログラミング言語には、構文や慣習として特徴的なものがいくつかあります。例えば、LISPではハテナ(#)が使われることがあります。これは、LISPでは、ハテナ以降の文字列をコメントとして扱います。つまり、プログラムを実行するときには、ハテナ以降の文字列は無視されるということです。
そのシャープ記号はハテナではないし、LISPのコメントはセミコロンでは?nishio.icon
安定の適当説明笑うyosider.icon
Rubyでは、大文字から始まる名前が、特別な意味を持つ場合があります。例えば、SymbolやRangeなどは、Rubyで定義されたクラスやモジュールの名前です。また、大文字から始まる名前は、定数として扱われることがあります。定数は、プログラムの中で変更することはできません。
そう、それ>定数nishio.icon
大文字小文字にシステム上の意味があるので、他の言語からきて単なるネーミングだと思ってる人が驚く
Pythonでは、アンダースコア(_)が使われることがあります。Pythonでは、アンダースコアで始まる名前は、慣習的にはプライベートなものとされます。つまり、プログラムの外部からは参照できないものとされることが多いです。また、Pythonでは、アンダースコアで始まる名前は、慣習的に特別な意味を持つことがあります。例えば、__init__は、クラスのコンストラクタとして扱われます。
そのシャープ記号はハテナではないし、LISPのコメントはセミコロンでは?
https://gyazo.com/245f99890c03d3657e9d3047c171db0d
かなり怪しげなことを言ってるなnishio.icon
Pythonでアンダースコアが慣習的にプライベートになるのはその通りだが、ネームマンダリングの話は?
https://gyazo.com/e5d44ce33c2b6b29ce879d1cdb0ffe75
問題なくアクセスできます
code:python
class MyClass:
def __init__(self):
self._x = 1
print(MyClass()._x) # => 1
ネームマングリングの例
code:python
class MyClass:
def __init__(self):
self.__x = 1
# print(MyClass().__x) # => AttributeError: 'MyClass' object has no attribute '__x'
print(MyClass()._MyClass__x) # => 1
nishio.iconLISPの末尾のクエッションマークにはどんな意味がありますか?
https://gyazo.com/035f5deda81848878c08a107d0a57800
サンプルコードに記号を使ってないじゃないか!
正解: 関数名末尾のハテナは記号を関数名に含めることができるLISPの実装においてよく使われる慣習であり、その関数が真偽値を返すことを示している
Scheme の真偽判定関数はほとんど '?' で終わる名前を持っています。 src 「著: ChatGPT、監修: 西尾泰和」で本が書けるのではと一瞬思ったけど、試してみて、現状だと僕が「デタラメを言うんじゃねえ!」と怒りながらほとんど書き直してしまう気がしたw
まあ単位時間あたりのアウトプットは増えるだろうから生産性は向上するかも知れんw
でも怒りドリブンで活動するのは精神衛生に良くないからやりたくないw まー、ホモサピエンスは怒らせるとアウトプット量が増えるってのは一般的に観測される性質ではあるかw
教えるのがnishio.iconさんで、AIの方が「こうですか?」みたいなシチュエーションなら成立しそうinajob.icon
マンダリング→マングリング?
あっ、予測変換が誤変換を生んでる!マングリングが正しいnishio.icon