Lisp 言語の紹介
Lisp は「List Processing」の略で、データ文字列を簡単に処理できるように設計された関数型プログラミング言語です。 Lisp は、シンボリック計算におけるシンプルさと優雅さで知られています。 Lisp プログラムは式 (リスト) で構成されているため、再帰演算や記号データの処理に特に適しています。
このガイドでは、Python を使用して簡素化された Lisp インタープリターを構築する方法を説明します。コースの終わりまでに、基本的な Lisp 式を評価し、関数を定義し、条件付きロジックを実行できる実用的なインタプリタが完成します。
Lisp 構文の例
これは、数値の 3 乗を計算するための簡単な Lisp プログラムです:
<code>(define square (lambda (x) (* x x))) (square 4) 输出:16</code>
この例では:
-
define
は、Lisp で新しい変数または関数を作成するために使用されます。名前を値または関数に関連付けて、将来のコードで参照できるようにします。 -
lambda
は、Lisp で匿名関数を作成するために使用されます。これらの関数には事前定義された名前はありません。これらを動的に作成して変数に割り当てる (または渡す) ことができます。
Lisp プログラミングをさらに詳しく学びたい場合は、このチュートリアルから始めるのが最適です [チュートリアルのリンクをここに挿入してください]。
Lisp インタープリターを構築する手順
lis.py
という名前の新しいファイルを作成します。これはインタープリターのメインの Python スクリプトになります。
1. トークン化
このステップでは、入力文字列をトークンと呼ばれる、より小さく、より意味のある部分に分割します。たとえば、( 1 2)
のような式はリスト ["(", " ", "1", "2", ")"]
に分解されます。このプロセスにより、入力の分析と操作が容易になり、その後の処理が可能になります。
def tokenize(source): """ 将输入源字符串分词: - 将开括号和闭括号替换为空格填充的版本,将它们视为单独的标记。 - 按空格分割修改后的字符串以获得标记列表。 参数: - source (str): 要分词的源代码。 返回: - 字符串列表:表示源代码的标记列表。 """ return source.replace("(", " ( ").replace(")"," ) ").split()
2. 解析
トークン化後、タグは構造化形式 (通常はネストされたリスト) に変換されます。たとえば、["(", " ", "1", "2", ")"]
は [" ", 1, 2]
になります。この構造化表現により、式を抽象構文ツリー (AST) と呼ばれるツリー状の構造にマッピングすることで、式をより簡単に評価できるようになります。
def read_from_tokens(tokens): # ... [代码与原文相同] ...
3. 環境設定
環境は、変数名と関数が格納される辞書として機能します。これには、
、-
、*
、/
などの組み込み関数だけでなく、ユーザー定義の変数や関数も含まれます。この環境により、インタープリタは式で使用される記号 (x や など) を解決できます。
class Env(dict): # ... [代码与原文相同] ...
Env クラスが必要なのはなぜですか?
Env クラスは、変数、関数、スコープを管理するインタープリターのバックボーンとして機能するため、非常に重要です。これが必要な理由は次のとおりです:
- 変数バインディング
- 関数ストレージ
- スコープ指定された解決
- 組み込み関数
4. 評価
解析された式が評価されるインタープリターのコアロジック:
- 数値 (例: 1、2.5) と変数 (例: x、y) は、それぞれの値に評価されます。
- 関数呼び出し (例:
( 1 2)
) は再帰的に評価されます。演算子 ( ) とパラメーター (1、2) は、解析と計算に環境を使用します。
<code>(define square (lambda (x) (* x x))) (square 4) 输出:16</code>
5. REPL (読み取り-評価-印刷ループ)
REPL は、ユーザーがリアルタイムで Lisp コマンドを入力して実行できるようにする対話型シェルです。ユーザー入力 (例: (define x 10)
) を読み取り、それを評価し (例: x に 10 を代入)、結果を出力します。
def tokenize(source): """ 将输入源字符串分词: - 将开括号和闭括号替换为空格填充的版本,将它们视为单独的标记。 - 按空格分割修改后的字符串以获得标记列表。 参数: - source (str): 要分词的源代码。 返回: - 字符串列表:表示源代码的标记列表。 """ return source.replace("(", " ( ").replace(")"," ) ").split()
結論
上記の手順に従うことで、算術式の処理、関数の定義、さらには条件付きロジックの処理ができる基本的な Lisp インタプリタが作成されました。これは単なる単純なバージョンですが、さらに詳しく調べると、高度なエラー処理、より適切なスコープ設定、追加の組み込み関数など、より多くの機能で拡張できます。
Lisp の世界にさらに深く入り込み、より高度な概念を学ぶことに興味がある場合は、Peter Norvig の Lisp インタプリタ チュートリアルをチェックすることを強くお勧めします。これは、このガイドでインタプリタを構築するための優れたリソースです。
以上がLisp インタプリタを構築して Python を学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

この記事では、コマンドラインインターフェイス(CLI)の構築に関するPython開発者をガイドします。 Typer、Click、Argparseなどのライブラリを使用して、入力/出力の処理を強調し、CLIの使いやすさを改善するためのユーザーフレンドリーな設計パターンを促進することを詳述しています。

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

この記事では、Pythonにおける仮想環境の役割について説明し、プロジェクトの依存関係の管理と競合の回避に焦点を当てています。プロジェクト管理の改善と依存関係の問題を減らすための作成、アクティベーション、およびメリットを詳しく説明しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック



