ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.

Slides:



Advertisements
Similar presentations
メモリとポインタ. プログラムの前提 コンピュータは、0と1で計算をし、 0と1でデータを保存している。 メモリを学ぶのに必要な知識である。
Advertisements

C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
C言語 配列 2016年 吉田研究室.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
C言語講座 第4回 ポインタ.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
構造体.
第4回放送授業.
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
の まとめ 2007/04/02 (Mon) / d;id:hzkr
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
プログラミング 3 構造体(1).
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
C言語講座 第3回 ポインタ、配列.
プログラミング論 関数ポインタ と 応用(qsort)
プログラミング2 関数
関数の定義.
プログラミング 4 記憶の割り付け.
プログラミング 3 構造体(2).
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
高度プログラミング演習 (08).
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
第7回課題 フィボナッチ数列 (コード:p.171) について,fib(4) を呼び出したときの起こる出来事は以下の通りである.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
関数への道.
プログラミング基礎B 文字列の扱い.
オブジェクト指向プログラミングと開発環境
演習0 func0, func1, func2を作成せよ. main()関数の中で,func0()を呼び出しを実行せよ.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
演習07-0 “Hello\n” “World!\n”と
C言語 はじめに 2016年 吉田研究室.
構造体と共用体.
プログラミング基礎a 第6回 C言語によるプログラミング入門 配列と文字列(その2)
データ構造とアルゴリズム 第11回 リスト構造(1)
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 3 2 次元配列.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
実装について 前田俊行.
ポインタとポインタを用いた関数定義.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
第5回 プログラミングⅡ 第5回
高度プログラミング演習 (11).
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
X64 函数呼び出し規約 長谷川啓
演習00-0 “Hello\n” “World!\n”と
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報処理Ⅱ 2005年11月25日(金).
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
値渡しと参照渡しについて.
第2章 数値の入力と変数 scanfと変数をやります.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
プログラミング 2 静的変数.
Presentation transcript:

ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数

eval関数(V0.9) スタック stack[1000] V0.9では、関数呼び出しのとき 関数に与えられた引数を評価した値を スタックに入れて呼び出す。 呼び出しが終了すると、スタックはもとに 戻される。 (+ 2 3) のとき、2,3 をstackに入れてその処理関数である s_plus を呼んでいる。(eval_slambda ) 関数s_plusは、シンボル + の値(シンボルのCDR) に1個のセルとして、そのCARが関数ポインタ タグはSLAMBDAとして作られている。

関数ポインタ 関数ポインタの宣言 int (*func)(int x,int y); は、その関数の開始アドレスをその 値として持っている。 C言語では、関数の名前(main,...) は、その関数の開始アドレスをその 値として持っている。 これを使って、関数ポインタをある場所に 保存したり、その値を用いて関数呼び出しを 行ったりすることができる。 関数ポインタの宣言 int (*func)(int x,int y);

例 int add2(int x, int y){ return x ,y; } main(){ int (*func)(int x,int y); func=add2; printf(“%d¥n”,(*func)(4 ,5));

関数ポインタの配列 int (*func[2])()={add2,mul2}; この呼び出しは、 (*func[0])(3,4); のように行う。確認せよ。

関数ポインタのcast 一般にcast変換は、 (型名) 変数; である。 関数ポインタのcast変換は、宣言の形 から変数部分を取り除いたものを使う。 func=(int (* )())x; eval.c の関数eval_slambdaはこれを 使っている。

やってみよう eval.c を変更して * - / assq write read eval などを、追加してください。