프로그래밍/RiveScript

[Tutorial] Conditionals

프리월드 2017. 3. 9. 14:43

Learning Things

우리는 RiveScript의 커맨드에 대해서 배웠습니다. 그런데 봇이 우리 이름도 기억하지 못한다면 이 대화가 무슨 소용일까요?

RiveScript는 사용자에 대한 변수를 저장하고 반복할 수 있는 기능이 있습니다. 사용자의 변수를 저장하기 위해 <set>태그를 사용하고 변수를 검색하기 위해 <get>태그를 사용합니다. 다음 예제를 통해서 우리는 어떻게 사용자 변수를 저장하고 불러 올 수 있는지 알 수 있습니다.

+ my name is *
- <set name=<star>>It's nice to meet you, <get name>.

+ what is my name
- Your name is <get name>, silly!

+ i am # years old
- <set age=<star>>I will remember that you are <get age> years old.

+ how old am i
- You are <get age> years old.

예제를 실행시켜보면 봇은 우리의 나이와 이름을 기억하고 있다는 것을 알 수 있습니다. 또한 변수에 대해서 이야기 하고 있다면 begin.rive에 정의한 변수도 이용 할 수 있지 않을까? 라는 궁금증이 생길 수 있습니다. 유사한 방식으로 변수의 값을 불러 올 수 있습니다. 아래의 예제를 참고하세요. 

! version = 2.0 // Bot variables ! var name = Tutorial ! var age = 5

// The user can ask the bot its name too!
+ what is your name
- You can call me <bot name>.
- My name is <bot name>.

+ how old are you
- I am <bot age> years old.

이제 봇에게 이름과 나이를 물어보면 변수의 저장된 값을 대답할 것입니다.


Writing Conditionals


봇은 사용자의 대한 정보를 학습함으로써, 조건문은 그 변수의 값을 기반으로 응답을 하게 됩니다. 그렇지만 봇에게 내 이름을 말하기전에 내 이름을 물어보게 된다면 "Your name is undefined, silly!" 라고 응답할 것입니다. undefined이라고 나오는 이유는 변수의 값이 저장되어 있지 않기 때문이죠. 이는 봇이 단순 프로그램처럼 느껴질것입니다.

우리는 조건문을 사용하여 봇이 응답하기 전에 내이름을 알고 있는지 모르는지 모른다면 어떻게 응답해야 되는지를 정의 할 수 있습니다. 아래의 예를 보겠습니다.

+ what is my name
* <get name> == undefined => You never told me your name.
- Your name is <get name>, silly!
- Aren't you <get name>?

봇에게 이름을 묻는다면 봇은 정의 되지 않는 내용에 대해서 조건문을 수행할 것입니다. 그리고 이름이 입력 되어 있다면 응답중에서 하나를 보여 줄 것입니다.

조건은 변수를 값과 비교하는데 사용됩니다. 변수를 다른 변수와 비교할 수도 있습니다. 다음 예제를 보겠습니다.

+ my name is *
* <formal>   == <bot name> => Wow, we have the same name!<set name=<formal>>
* <get name> == undefined  => <set name=<formal>>Nice to meet you!
- <set oldname=<get name>><set name=<formal>>
^ I thought your name was <get oldname>?

행이 부족하다면 ^ Continuation커맨드를 사용해서 공간을 확보 할 수 있습니다. 조건은 위에서 아래로 점검됩니다. 

다음과 같은 비교 연산자를 사용할 수 있습니다.

==  equal to
eq  equal to (alias)
!=  not equal to
ne  not equal to (alias)
<>  not equal to (alias)

숫자를 비교하기 위해서는 아래의 비교 연산자를 사용해야 합니다.

<   less than
<=  less than or equal to
>   greater than
>=  greater than or equal to
다음은 다양한 비교 연산자를 사용한 예입니다.
+ what am i old enough to do
* <get age> == undefined => I don't know how old you are.
* <get age> >  25 => You can do anything you want.
* <get age> == 25 => You're old enough to rent a car with no extra fees.
* <get age> >  21 => You're old enough to drink, but not rent a car.
* <get age> == 21 => You're exactly old enough to drink.
* <get age> >  18 => You're old enough to gamble, but not drink.
* <get age> == 18 => You're exactly old enough to gamble.
- You're not old enough to do much of anything yet.


'프로그래밍 > RiveScript' 카테고리의 다른 글

[Tutorial] The Begin Block  (0) 2017.03.09
[Tutorial] Topics  (0) 2017.03.09
[Tutorial] Short Discussions  (2) 2017.03.09
[Tutorial] Redirections  (0) 2017.03.09
[Tutorial] Priority Triggers  (0) 2017.03.08