Lispのプログラムの解説をお願い
解決済
回答 2
投稿
- 評価
- クリップ 2
- VIEW 738
前提・実現したいこと
授業でLispを用いたプログラムの課題が出ました.
Lisp初心者のため,簡単な問題もわかりません.
自分でも調べましたが,どうしてもわからず,期限も迫ってきたため,質問させていただきます.
該当のソースコード
((lambda (a + b)(+ b a)) 2 - 4)
実行結果は2になりますが,なぜそうなるのかがわかりません.
((lambda (a)
(lambda (b)
((sqrt a)(sqrt b))))
5)
実行結果は#<procedure>になりますが,なぜそうなるのかがわかりません.
>(define arg 5)
> (define local-arg 3)
> (define (proc arg)
(let ((local-arg 2))
(list arg local-arg)))
> (proc 1)
実行結果は'(1 2)になりますが,なぜそうなるのかがわかりません.
試したこと
Lispについてwebで調べてみましたが,あまり理解できませんでした.
lambda式についても調べましたが,C++やPythonなどの言語しか触ったことがないので,
全体的に理解できませんでした.
上記の3つのプログラムについて,解説していただければ幸いです.
よろしくお願いいたします.
補足情報(言語/FW/ツール等のバージョンなど)
実行環境はDrRacketというツールで実行しています.
OSはwindows7です.
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
1 .
((lambda (a + b)(+ b a)) 2 - 4)
+
に特別な感情を持つとわけわからなくなりますが、
a
,b
と同じでただの仮引数名なので、これは
((lambda (a op b)(op b a)) 2 - 4)
つまり
(- 4 2)
となるので2です。
2 .
((lambda (a)
(lambda (b)
((sqrt a)(sqrt b))))
5)
「a
を渡すと『b
を渡すと((sqrt a)(sqrt b))を返す関数』を返す関数」
に5を渡すと
『b
を渡すと((sqrt 5)(sqrt b))を返す関数』
になるので、
#<procedure>
になります。
3 .
地道に追ってください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
プログラミング言語を学ぶのなら、ただコードを動かしてみるだけでなく、リファレンスになるマニュアルや書籍を手元に置いて参照できるようにしておくべきです。Lispの入門者向けの書籍を探してみました。
- 酒井皇治『やさしいLisp入門』カットシステム, 2004.
- 竹内郁雄『初めての人のためのLISP 増補改訂版』翔泳社, 2010.
- Conrad Barski, M.D.『Land of Lisp』オライリー・ジャパン, 2013.
どれもそれなりに量がありますが、ひとつの言語を理解させようとするとそうなるのですね (読むのはどれか一点でいいです)。
あと、関連する本 (これだけ読んでもLispができるようにはなりませんが)。
- 小林健一郎『プログラミング20言語習得法: 初心者のための実践独習ガイド』〈ブルーバックス〉講談社, 2014.
え?「本をたくさん読んでいたら課題提出の期限に間に合わない」ですって? ならば今回は提出はあきらめて、じっくり読んで学んで下さい。まあ、ご質問の点についてはこの場で回答して下さる方が……、もしかすると……、あるかもしれませんが。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
質問への追記・修正、ベストアンサー選択の依頼
matobaa
2017/01/04 14:54 編集
C++の関数ポインタ、std::function、または Python の Lambda は知っていますか? 回答中でこれらを使ってもよいでしょうか?
papi_tokei
2017/01/04 14:58
返信いただきありがとうございます.c++の関数ポインタはわかります.pythonのラムダ式も今調べて理解しました.
ikedas
2017/01/04 15:24
授業ではLispについて説明があったのでしょうか。それとも授業の中では説明はなく、Lisp (ラムダ式も含む) が何なのかを自分で調べて回答しなさい、という課題なのでしょうか。
papi_tokei
2017/01/04 15:52
返信ありがとうございます.授業では,Lispについてある程度の説明はありました.ですが,その部分の問題はすでに回答しています.上記に記載しましたプログラムを自力で理解して,説明せよという問題です.
ikedas
2017/01/04 15:58
なるほど。で、授業で使った教科書などあれば、回答に追記しておいていただけますか (著者名、書名、出版社名を明記する)。同じ本を読めるかたがいれば、その内容も勘案して回答してくれるかもしれません。
papi_tokei
2017/01/04 16:03
返信ありがとうございます.授業では教科書は使っていません.参考資料はすべて先生が作成したスライドになります.授業の趣旨がLispについてではなく,プログラミング言語についてなので,いろいろな言語について学ぶ授業です.今回年末をはさんだのでLispについて量の多い課題が出ました.