• 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

Revision5e960ae0d48030721dec541dabeb10b862c9f606 (tree)
Time2018-04-01 23:08:57
Authordhrname <dhrname@user...>
Commiterdhrname

Log Message

Modify the ST_eval function

Change Summary

Incremental Difference

--- a/source_code/shadowstar.c
+++ b/source_code/shadowstar.c
@@ -464,8 +464,8 @@ ST_Binary_Tree ST_parse(ST_Token_Mode *array, size_t length, ST_Ordered_Pair *l
464464 /*ST_eval 関数
465465 * ベータ簡約を用いて、解析リストの評価を行う
466466 * 返り値は左の枝が変数リストで、右の枝が関数抽象の隣接リストである二分木
467- * この際、その変数リストも関数抽象の隣接リストも、
468- * 引数で指定されたリスト(listとblist)とは異なり、新たに作成されたオブジェクトである*/
467+ * この際、返り値である変数リストも関数抽象の隣接リストも、
468+ * 新たに作成されたオブジェクトである*/
469469 ST_Binary_Tree ST_eval(ST_Ordered_Pair *list, ST_Binary_Tree blist)
470470 {
471471 /*エラーを明確にするため、listやblistのNULLチェックは
@@ -477,8 +477,24 @@ ST_Binary_Tree ST_eval(ST_Ordered_Pair *list, ST_Binary_Tree blist)
477477 return ST_EMPTY;
478478 }
479479
480+ /*blistから関数抽象を取り出す*/
481+ ST_Binary_Tree abstract = ST_getListItem(blist, 0);
480482
481- return ST_pairTree(list, blist);
483+ /*返り値(変数か、関数抽象)*/
484+ ST_Ordered_Pair *resultlist = list;
485+
486+ if ( !ST_isEmpty(ST_second(ST_getSecondTree(abstract))) )
487+ {
488+ /*「甲」(乙)「丙」(丙)のように、abstrctが関数適用の対象であれば、
489+ * ベータ変換を試みる*/
490+ resultlist = ST_second(ST_getFirstTree(abstract));
491+ }
492+ else
493+ {
494+ resultlist = list;
495+ }
496+
497+ return ST_pairTree(resultlist, blist);
482498 }
483499
484500 /*以下の連結リスト構造については数学の集合とラムダ計算と意味論を参照のこと
Binary files a/source_code/shadowstar.o and b/source_code/shadowstar.o differ
--- a/source_code/startest.c
+++ b/source_code/startest.c
@@ -454,14 +454,17 @@ int main(int argc, char **argv)
454454 init_token_length(tokens6, length);
455455 varlist = ST_tokenize(u8"「海」(愛)とは、「涙」(謎)", tokens6);
456456 btr = ST_parse(tokens6, length, varlist);
457- evalresult = ST_eval(varlist, btr);
458- //assert(ST_getFirstTree(evalresult) != varlist);
457+ rebtr = ST_reverse(btr);
458+ evalresult = ST_eval(varlist, rebtr);
459+ assert(ST_getFirstTree(evalresult) != varlist);
460+ assert(ST_first(ST_getFirstTree(evalresult)) == ST_getItem(varlist, 1));
459461 /*assert(ST_getFirstTree(evalresult) != ST_setChurchNumber(3, ST_second, varlist));
460462 be = ST_getSecondTree(evalresult);
461463 assert(ST_isEmpty(be));*/
462464
463465
464466 ST_freetree(btr);
467+ ST_freetree(rebtr);
465468 ST_freelist(varlist);
466469
467470 ST_Token_Mode tresult[1] = {0};
Binary files a/source_code/startest.o and b/source_code/startest.o differ