修订版 | f8c49f238412be17cb30e42e98db350b6d2fbe77 (tree) |
---|---|
时间 | 2018-11-25 20:30:52 |
作者 | dhrname <dhrname@user...> |
Commiter | dhrname |
Modify the ST_parse and Move an interface for the ST_getBoundVariable
@@ -103,3 +103,9 @@ typedef ST_Node (*ST_Node2Node)(ST_Node); | ||
103 | 103 | /*ST_setItemNode 関数 |
104 | 104 | * C言語でラムダ計算のchurch数を部分的に再現するための関数(ノード用)*/ |
105 | 105 | ST_Node ST_setItemNode (uint_fast32_t length, ST_Node2Node f, ST_Node node); |
106 | + | |
107 | + | |
108 | +/*ST_getBoundVariable 関数 | |
109 | + * 関数抽象ノードabstractionの束縛変数(Bound Variable)を数値化したものを取得する | |
110 | + * ここでいう束縛変数とは、λx.Mのときの、変数xを指す*/ | |
111 | +ST_First_Type ST_getBoundVariable (ST_Ordered_Pair *); |
@@ -462,9 +462,6 @@ ST_Node ST_parse(ST_Node freetree, ST_Token_Mode *array, size_t length, ST_Order | ||
462 | 462 | ST_Ordered_Pair *null; |
463 | 463 | null = ST_EMPTY; |
464 | 464 | |
465 | - /*前回のキャッシュしておいた変数の値*/ | |
466 | - ST_Ordered_Pair *cache_v = v; | |
467 | - | |
468 | 465 | /*束縛変数、すなわち、()内の変数の値を格納したスタックリスト*/ |
469 | 466 | ST_Stack_List bound_vstacklist = &null; |
470 | 467 |
@@ -499,8 +496,6 @@ ST_Node ST_parse(ST_Node freetree, ST_Token_Mode *array, size_t length, ST_Order | ||
499 | 496 | /*変数ノードには、変数の値だけがノード値として格納される*/ |
500 | 497 | ST_setNodeValue(seq, v); |
501 | 498 | } |
502 | - /*後述する関数抽象の終わりのために、変数をキャッシュしておく*/ | |
503 | - cache_v = v; | |
504 | 499 | v = ST_second(v); |
505 | 500 | break; |
506 | 501 | case ST_KAGIKAKKO_END_TOKEN: |
@@ -515,7 +510,7 @@ ST_Node ST_parse(ST_Node freetree, ST_Token_Mode *array, size_t length, ST_Order | ||
515 | 510 | /*ノード型を関数抽象型とする*/ |
516 | 511 | seq->nodeType = ST_LAMBDA_ABSTRACTION_NODE; |
517 | 512 | /*あらかじめキャッシュしておいた変数cache_vは、「の後で、一番目に出てくる変数*/ |
518 | - ST_setNodeValue(seq, ST_pairTree(ST_popTree(bound_vstacklist), cache_v)); | |
513 | + ST_setNodeValue(seq, ST_popTree(bound_vstacklist)); | |
519 | 514 | break; |
520 | 515 | default: |
521 | 516 | break; |
@@ -910,9 +905,9 @@ ST_Binary_Tree ST_getListItem (ST_Binary_Tree list, uint_fast32_t num) | ||
910 | 905 | /*ST_getBoundVariable 関数 |
911 | 906 | * 二分木リストとして表現された関数抽象abstractionの束縛変数(Bound Variable)を数値化したものを取得する |
912 | 907 | * ここでいう束縛変数とは、λx.Mのときの、変数xを指す*/ |
913 | -ST_First_Type ST_getBoundVariable (ST_Binary_Tree abstraction) | |
908 | +ST_First_Type ST_getBoundVariable (ST_Ordered_Pair *abstraction) | |
914 | 909 | { |
915 | - return ST_first(ST_getFirstTree(abstraction)); | |
910 | + return ST_first(abstraction); | |
916 | 911 | } |
917 | 912 | |
918 | 913 | /*ST_freetree 関数 |
@@ -52,8 +52,3 @@ typedef struct ST_Text_Code { | ||
52 | 52 | ST_Token_Mode* array; /*トークンモードの配列*/ |
53 | 53 | uint_fast32_t pos; /*現在のソースコードの位置*/ |
54 | 54 | } ST_Text_Code; |
55 | - | |
56 | -/*ST_getBoundVariable 関数 | |
57 | - * 二分木リストとして表現された関数抽象abstractionの束縛変数(Bound Variable)を数値化したものを取得する | |
58 | - * ここでいう束縛変数とは、λx.Mのときの、変数xを指す*/ | |
59 | -ST_First_Type ST_getBoundVariable (ST_Binary_Tree); |