質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Q&A

解決済

2回答

2738閲覧

LISPを実装した後に実装したLISPを使って実装すべき関数は?

hojo

総合スコア195

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

1グッド

1クリップ

投稿2017/08/15 12:26

編集2017/08/15 12:27

LISPの勉強のためJavaScriptでLISPを実装しています。

Wikipediaの純LISPの項目を見るとatom, eq, car, cdr, consの基本関数とcond, quote, lambda, defineの特殊形式を実装すると自分自身を解釈実行できるeval(超循環評価器)を理論上構成できる、とのこと。

なんとかevalを実装(それらの最小要素での実装は自分には早かったのでjsで実装)し、また変数を利用できるようにするためset関数(defineと同じ?)をjsで実装し、+,-,*,/などの基本的な四則演算関数をjsで実装しました。

lisp

1(set (quote a) 1) ; グローバル変数aに1を代入 2(+ 1 a) ; 2

なんとも言い難い感動を覚えたのですが、jsによる関数の実装で言語拡張を続けており、いまいち自分が作ったlispの上で自身を拡張していくというステップに踏み込めません。

LISPでまともにプログラミングできるようにするため
LISPを実装した後に実装したLISPを使って実装すべき関数何でしょうか?

個人的にはdolistをlispで実装したいと思っていますが、実装しようとするといまいち繰り返し処理が実装できず、困っています。

わからないことが多すぎて回答が困る話題になると思いますので、純lispの実装から始まり、lispでlispをどのように拡張していくか丁寧に記載されている本やブログなどございましたらそちらの紹介でもいいので、お助けください。

ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

クワインとか作って遊んで見る手もあるかもしれません。
クワインとは自分自身を結果とする式です。つまり、eval した結果が同じ式になる式です。
lispでは他の言語より作りやすいです。

投稿2018/10/10 20:12

myoon

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

fibonatti、tak(たらい回し関数) などはどうでしょうか。どちらも再帰を行いパフォーマンスチューニングの題材として良いと思います。
またマクロを実装すると lisp で lisp の関数が作れる様になって良い題材になると思います。

投稿2017/08/15 16:19

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hojo

2017/08/16 00:15

ご回答ありがとうございます。macroを実装するとlispでlispの関数が作れるというのはmacroを実装するとlispでlambdaを実装できるという解釈でよろしいでしょうか?詳しい資料などございましたら是非URLなど教えていただきたいです。
mattn

2017/08/16 00:54

特に難しい話でなく例えばマクロが実装出来たら when が作れるとかその程度の話です。 (defmacro when (condition &rest body) `(if ,condition ,@body))
hojo

2017/08/16 05:36

ありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問