• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revisãoedca4b5ad73bceb93241a4a518609f46f490d3f0 (tree)
Hora2017-09-01 23:26:17
Autordhrname <dhrname@user...>
Commiterdhrname

Mensagem de Log

New the ST_getFirstTree function

Mudança Sumário

Diff

--- a/source_code/shadowstar.c
+++ b/source_code/shadowstar.c
@@ -416,14 +416,15 @@ ST_Ordered_Pair *ST_eval()
416416 }
417417
418418 /*以下の連結リスト構造については数学の集合とラムダ計算と項書き換え系を参照のこと
419+ * モデル
419420 * ここでは、:=を定義とする
420421 * 空集合 := {}
421422 * 対、あるいはNo Ordered Pair := {a, b}
422423 * 集合の性質として{a, b} = {b, a}
423- * 順序対 あるいは、Ordered Pair := (a, b)
424- * (a, b) := { a, {a, b} }
425- * n項組 あるいは、n組、n-tupples := [a, b, c, ... ]
426- * [a, b, c] := (a, ( b, (c, {}) ) )*/
424+ * 順序対 あるいは、Ordered Pair := (a, b)とすると、
425+ * (a, b) := {a, {a, b}}
426+ * n項組 あるいは、n組、n-tupples := [a, b, c, ... ]とすると、
427+ * [a, b, c] := (a, ( b, (c, {}) ) )で表せる*/
427428
428429 /*ST_EMPTY
429430 * 空リストを表現する構造体
@@ -431,7 +432,8 @@ ST_Ordered_Pair *ST_eval()
431432 const ST_Ordered_Pair ST_EMPTY = {
432433 0.0,
433434 NULL,
434- 0
435+ 0,
436+ NULL
435437 };
436438
437439 /*ST_isEmpty 関数
@@ -510,6 +512,7 @@ ST_Ordered_Pair *ST_pair (ST_First_Type n, ST_Ordered_Pair *p) {
510512 s->first = n;
511513 s->second = p;
512514 s->lifepoint = 0;
515+ s->first_tree = &ST_EMPTY;
513516 if (!ST_isEmpty(p)) {
514517 p->lifepoint++;
515518 }
@@ -542,7 +545,7 @@ ST_Ordered_Pair *ST_setChurchNumber (uint_fast32_t length, Ord2ST_Ordered_Pair f
542545 }
543546
544547 /*ST_getItem 関数
545- * 入力されたリストの最後からnum番目にある項目の値を取り出す(num >= 0)*/
548+ * 入力されたリストの最後からnum番目にある項目の最初の値を取り出す(num >= 0)*/
546549 ST_First_Type ST_getItem (ST_Ordered_Pair *list, uint_fast32_t num)
547550 {
548551 return ST_first( ST_setChurchNumber(num, ST_second, list) );
@@ -584,3 +587,15 @@ ST_First_Type ST_pop (ST_Stack_List stack)
584587 stackfree = NULL;
585588 return value;
586589 }
590+
591+/*ST_getFirstTree 関数
592+ * 二分木の最初の枝を返す関数
593+ * first関数との違いは、数値型を返すか、ポインタ型を返すかの差*/
594+ST_Ordered_Pair* ST_getFirstTree(ST_Ordered_Pair *list)
595+{
596+ if (ST_isEmpty(list)) {
597+ return &ST_EMPTY;
598+ } else {
599+ return list->first_tree;
600+ }
601+}
Binary files a/source_code/shadowstar.o and b/source_code/shadowstar.o differ
--- a/source_code/star.h
+++ b/source_code/star.h
@@ -35,11 +35,12 @@ typedef double ST_First_Type ;
3535
3636 /*ST_OrderedPair 構造体
3737 * 順序対を作るための構造体
38- * ただし、属性fだけは操作として、next関数で使われる*/
38+ * タプルを用いて、連結リストや二分木を作るため、順序対の考え方を導入する*/
3939 struct ST_OrderedPair {
4040 ST_First_Type first; /*対となる一番目*/
4141 ST_Ordered_Pair *second; /*対となる二番目*/
4242 int32_t lifepoint; /*参照カウンタ*/
43+ ST_Ordered_Pair *first_tree; /*対となる一番目(ただし、二分木で使う)*/
4344 };
4445
4546 /*ST_EMPTY
@@ -114,6 +115,10 @@ ST_Stack_List ST_push (ST_First_Type value, ST_Stack_List stack);
114115 * スタックからは取り除かれる*/
115116 ST_First_Type ST_pop (ST_Stack_List stack);
116117
118+/*ST_getFirstTree 関数
119+ * 二分木の最初の枝を返す関数*/
120+ST_Ordered_Pair* ST_getFirstTree(ST_Ordered_Pair*);
121+
117122 /*トークン化したときの識別用のマジックナンバー*/
118123 typedef enum {
119124 ST_UNKNOWN_TOKEN = 0, /*未知のトークン*/
--- a/source_code/startest.c
+++ b/source_code/startest.c
@@ -328,7 +328,7 @@ int main(int argc, char **argv)
328328 assert(tokens[2] == 0);
329329 elapsed = clock() - before;
330330 printf("Time is %.3f seconds\n", elapsed/CLOCKS_PER_SEC);
331-
331+
332332 assert(ST_isEmpty(&ST_EMPTY));
333333 ST_Ordered_Pair alist= {FP_NAN, NULL, 0};
334334 ST_Ordered_Pair blist = {0.0, NULL, 0};
@@ -394,6 +394,15 @@ int main(int argc, char **argv)
394394 ST_freelist(*stack);
395395 ST_freelist(ppp);
396396
397+ ST_Ordered_Pair dlist= {FP_NAN, NULL, 0, &ST_EMPTY};
398+ ST_Ordered_Pair elist = {0.0, NULL, 0, &dlist};
399+ ST_Ordered_Pair flist = {1.0, &elist, 0, &elist};
400+ assert(ST_isEmpty(ST_getFirstTree(&ST_EMPTY)));
401+ assert(ST_getFirstTree(&dlist) == &ST_EMPTY);
402+ assert(ST_getFirstTree(&elist) == &dlist);
403+ assert(ST_getFirstTree(&flist) == &elist);
404+
405+ errno = 0;
397406 eprint_log("Error!\n");
398407 eprint_log("Error!\n");
399408 eprint_log("");
Binary files a/source_code/startest.o and b/source_code/startest.o differ