2012-05-01 10 views
1

私はチュートリアルを読んでおり、単一のリストを再帰する方法を理解することは難しいと感じています。誰かが、基本ケースが何であるべきか、なぜそうでなければならないのか、再帰で何をすべきかを簡単に説明できますか?私のコードは次のとおりです。コードのプロローグで単一のリストを再帰する方法は?

type(string). 

type(int). 

instance(X,Y):- X, Y. 

variable(_). 

statement([]). 

statement(A|B):- A, statement(B). 

目的は、このようなことを確認するために光型チェッカーを作ることです。

String s; int i; i = s.length(); 

私はテストとしてこれを渡しています:

statement([instance(type(string), variable(s))]). 

私はそれをリストに入れて再帰し、ifの後に置くことにしました。それがルールの1つに合っていれば、それは本当でしょう。現在のところ、私はインスタンスのインスタンス化を働かせることを確実にしています。どんな助けでも歓迎です!前もって感謝します。あなたは

statement(A|B) 

に角括弧のペアが欠落している

+0

ベースケースはリストを[[] 'と統一する必要があります。 「再帰でやっている限り」、Prologには本当に選択肢がありますか? – dasblinkenlight

+0

私はswiprologを使っています。しかし、どのように[]とリストを統一するのですか? – Andy

+0

あなたはヘッドと一体化する1つのルールを書いています。 ([H | T]): - ... 'と、空リスト' rule([]):---- 'と統合する別のものです。 – dasblinkenlight

答えて

1

それはあなたの再帰的なルールの残り

statement([A|B]) 

する必要があります正常に見えます。

+0

ステートメント([])とは正確に何ですか?実際には?彼らはどのように一体化していますか?これは[] = []と同じですか? ? – Andy

関連する問題