本でSchemeを勉強しはじめたのですが、括弧が深くなってくると、ブロックの終わりがパッとわかりません。
LISPer/Schemerの皆さんは、紙に書いてあるコードのどこからどこまでがブロックなのか、パッとわかるのでしょうか。
私は括弧を数えないとわからないし、よく間違えるので、今はエディタに書き起こして、括弧対応を調べていますが、どうやったらパッとわかるようになるのでしょうか。あるいは、そもそもエディタ無しではパッとわからないものなのでしょうか。わかるようになるためのコツがあれば教えてください。
No.1ベストアンサー
- 回答日時:
>紙に書いてあるコードのどこからどこまでがブロックなのか、パッとわかるのでしょうか。
分かんないんじゃないでしょうか(笑)?
ポール・グレアムと言うLispハッカーが仰ってましたが、コードは「括弧で」読んでるんじゃなくって「インデントで」読んでると思います。
例えば、
(define (integrate func a b n)
(let ((h (/ (- b a) n)))
(let loop ((i 1) (s (/ (+ (func a) (func b)) 2)))
(if (= i n)
(* h s)
(loop (+ i 1) (+ s (func (+ a (* i h)))))))))
なんてあった場合は
define (integrate func a b n)
let h = (b-a)/n
let loop(i=1) (s=((func a)+(func b))/2
if i=n
h*s
loop (i+1) (s=(func (a+(i*h))))
みたいに「括弧を外して」「インデント中心で」脳内変換して読んでいると思います。(教えてgooだとインデント付けられないので苦しいのですが)
ポール・グレアムも「インデント無しで一行で書かれたLispコードを読むのは不可能だ」と仰っていました。
>どうやったらパッとわかるようになるのでしょうか。
本でもそうですが「インデントで」読んでいくしかないと思います。
(逆に言うと、インデントの付け方がヘタクソな本でしたら読むのは難しいでしょう。)
>そもそもエディタ無しではパッとわからないものなのでしょうか。
それが解答と言えば解答になるやもしれません。
Emacsとかでしたら「括弧の対応」が比較的楽なんで(対応している括弧同士を光らせたり色を薄くすることが出来る)、そう言う機能が無いとLisp系でコードを書く/読むのは難しいと思いますよ。
大体、僕の経験ですと、「Lispの出版物」の校正がまた大変みたいで(笑)、括弧の数が間違えたまま出版されていて、その本の通りにソースを入力しても動かない事がままありました(笑)。また、適切なエディタ無しで「Lispインタプリタ上に」コード入力すると、大体動きませんね(笑)。まず確実に「括弧の付け方」を間違えるから、です(笑)。エディタ無しではLisp/Schemeは難しいです。Pythonもエディタ無しでは難しいですけど、Lisp/Schemeではそれ以上に難しいです。
ええと、Emacsの編集で「Lispの括弧をどうするか?(光らせたり薄くしたりする)」説明しているサイトがありました。それを参考にすれば「意識的に括弧を頭から追い出す」練習ができると思います。どの道「インデントで」読むんですから、括弧は「目立たせない」方が良いでしょう。その方が「Lisp慣れ」が早いとは思います。
参考URL:http://0xcc.net/unimag/10/
cametan_42さん、
早速の丁寧な解説、ありがとうございます。
Lispハッカーでもやっぱりインデント無いと厳しいんですね。
自分としては、かなり安心し勇気づけられました。
↓のtree->generatorのあたりで、call/ccの概念に加え、括弧対応がわかんなくなって、何か理解するための才能に書けてるのだろうか?と悩んで挫折しかけていました…
http://download.plt-scheme.org/doc/205/html/t-y- …
エディタ片手にがんばって、インデントの慣用にも慣れたいと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) Word文書で1,2,3...になっている脚注を、一括で(1),(2),...といった括弧つきに変更 2 2023/03/03 21:27
- Excel(エクセル) エクセルの数式で添付写真のものを入力していてわからないのですが、こちらの通り[]括弧も入れて入力しま 4 2023/02/05 18:33
- 数学 参考書・因数分解の回答で 共通因数を括る時 「括弧の前」に括る場合と 「括弧の後」に括る場合と別れま 1 2023/01/31 13:52
- その他(プログラミング・Web制作) プログラミング言語について 2 2023/06/04 01:39
- 数学 因数分解 4 2022/04/18 22:32
- その他(形式科学) モル濃度 計算 質問 2 2023/06/02 16:43
- 数学 数学について (1+2)−5 分配法則と、括弧の中から計算するとでは、答えが違いますがどういうことで 2 2023/01/13 19:21
- 英語 英語5文型の分け方についてです The national business travel assoc 3 2022/12/03 19:51
- 大学・短大 英詩のレポートを書いているのですが、引用した後に括弧内に作者の名前を書くのだと思っていたら教授は編集 4 2022/08/04 19:24
- Excel(エクセル) 条件式書式の設定 3 2023/07/04 05:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
ExcelのVBAコードについて教え...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
VB6のComboBox関連の書き方をVB...
-
HTML電卓で1文字消す方法
-
VLookup関数を使ってラベルに表...
-
access2003 クエリSQL文に...
-
Excel VBA素人です。VBAで図形...
-
pythonにてseleniumを使うも、...
-
ExcelVBAで「Shift_JIS(MS932)...
-
エクセルに見えない文字(JISX0...
-
レポートでグループレベルの変...
-
chatgptでつくってもらったコー...
-
JANコードとPOSコードは同じ?
-
ACCESSで、履歴事項を管理する...
-
1、Rstudioで回帰直線を求める...
-
videopadについて
-
VBAでファイルオープン後にコー...
-
CheckBoxのコントロール配列に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
おすすめ情報