初めて自分の家と他人の家が違う、と意識した時

私は自然言語処理に興味があるものですから、そういったものに関連するような言語に興味をもち、lilfesという言語に至りました。
http://www-tsujii.is.s.u-tokyo.ac.jp/lilfes/manu …
このユーザーマニュアルを読んでいるのですが、よく分からない事があり、もしかして度々質問する事になる気がします・・・・orz

本題ですが、型定義についての質問です。
http://www-tsujii.is.s.u-tokyo.ac.jp/lilfes/manu …
このサイトを参考に次のように定義してみました。
string <- [bot].
person <- [bot] + [NAME\string].
そしてそれをAVM木で表示したくて次のようにタイプしました。
:- printAVM(person & NAME\string).
その結果
>person

orz
なぜ?私が期待していた回答は
|~person ~|
| NAME:string |
こんな感じになると思ったのですが・・・。識者の方、私のような人間にも分かるよう教えていただけますか?

A 回答 (2件)

> person <- [bot] + [NAME\string].


でNAMEに入る型がstringであると定義しているにもかかわらず

> string <- [bot].
でstringの型をbotと定義しているので期待した表示が出なくなります。

なので
> :- printAVM(person & NAME\string).
の"string"の型がstringであると定義すればよいので

> person <- [bot] + [NAME\string].
> str <- [string].
> :- printAVM(person & NAME\str).
|~person ~|
|_NAME:str_|

とすればうまく表示されます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。返事が遅れまして大変申し訳ございません。
上記の通りしたら、確かに表示されました。ありがとうございます。
stringの型はlilfesに元々既にある型であるということなのですね・・・。
すいません、また分からないことがあれば質問すると思います。
回答してくださった方々、ありがとうございました。

お礼日時:2009/11/20 08:34

まずそもそも printAVM はその様に型を受け取る述語ではありません。


例えば
:- printAVM(person & NAME\"hoge").
の様に使う訳、です。
また string <- [bot] というのがまずい様です。
その一行を消して見てください。
以下のようにおそらく(?)予想通りの答えが出る、と思います。

$ lilfes
> person <- [bot] + [NAME\string].
> :- printAVM(person & NAME\"hoge").
|~person ~|
|_NAME:"hoge"_|
>

string という型で使いたいのにもかかわらず bot にしてしまっては、printAVMはそもそも上記のように使うものなので、string を入れようとすると怒られてしまう羽目になる訳、です。

この回答への補足

すいません。お礼の表示で間違いが・・・。
|~person ~|
|_EMPLOYER:john_|
|_EMPLOYEE:john_|
ではなく
|~person ~|
|_EMPLOYER:john_|
|_EMPLOYEE:ken_|
でした。

補足日時:2009/11/20 08:25
    • good
    • 0
この回答へのお礼

回答ありがとうございます。返事が遅れまして大変申し訳ございません。
その後、自分でも試行錯誤してみましたところ、
$ lilfes
> john <- [bot].
> ken <- [bot].
> person <- [bot] + [EMPLOYER\, EMPLOYEE\ken].
> :- printAVM(person & EMPLOYER\john、EMPLOYEE\ken).
|~person ~|
|_EMPLOYER:john_|
|_EMPLOYEE:john_|
>
と表示されました。

回答通りしたところ同じように表示されました。
しかし、このprintAVMは値を与えなければ、もしや表示されないということなのでしょうか・・・。

お礼日時:2009/11/20 08:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!