2011-05-15 5 views
0

SWI Prolog와 함께 사용할 준비가 된 프로그램을 복구하는 방법은 무엇입니까? 소스에오류 메시지, 제대로 작동하지 않음 - 프롤로그

링크 : http://ai-programming.com/prolog_bot_tutorial.htm chatterbot2 :

나는 readwriteread_stringwrite_string 수정 :

鐀1 ?- chatterbot2. 

>hi. 
I'M NOT SURE IF I UNDERSTAND WHAT YOU ARE TALKING ABOUT. 
ERROR: random/1: Domain error: `not_less_than_one' expected, found `0' 
    Exception: (7) select_response([], _G492) ? creep 
2 ?- chatterbot2. 

>'What do you do ?'. 
I'M NOT SURE IF I UNDERSTAND WHAT YOU ARE TALKING ABOUT. 
ERROR: random/1: Domain error: `not_less_than_one' expected, found `0' 
    Exception: (7) select_response([], _G485) ? creep 
3 ?- chatterbot2. 

>'Dog is black'. 
I'M NOT SURE IF I UNDERSTAND WHAT YOU ARE TALKING ABOUT. 
ERROR: random/1: Domain error: `not_less_than_one' expected, found `0' 
    Exception: (7) select_response([], _G485) ? creep 
4 ?- 

편집 : 내가 얻을 그것을 사용하려고

knowledge_base([ 
    ['WHAT IS YOUR NAME', 
    ['MY NAME IS CHATTERBOT2.', 
    'YOU CAN CALL ME CHATTERBOT2.', 
    'WHY DO YOU WANT TO KNOW MY NAME?'] 
    ], 

    ['HI', 
    ['HI THERE!', 
    'HOW ARE YOU?', 
    'HI!'] 
    ], 

    ['HOW ARE YOU', 
    ['I''M DOING FINE!', 
    'I''M DOING WELL AND YOU?', 
    'WHY DO YOU WANT TO KNOW HOW AM I DOING?'] 
    ], 

    ['WHO ARE YOU', 
    ['I''M AN A.I PROGRAM.', 
    'I THINK THAT YOU KNOW WHO I''M.', 
    'WHY ARE YOU ASKING?'] 
    ], 

    ['ARE YOU INTELLIGENT', 
    ['YES,OFCORSE.', 
    'WHAT DO YOU THINK?', 
    'ACTUALY,I''M VERY INTELLIGENT!'] 
    ], 

    ['ARE YOU REAL', 
    ['DOES THAT QUESTION REALLY MATERS TO YOU?', 
    'WHAT DO YOU MEAN BY THAT?', 
    'I''M AS REAL AS I CAN BE.'] 
    ] ]). 

select(0, [H|_], H). 
select(N, [_|T], L) :- N > 0, N1 is N - 1, select(N1, T, L). 

list_length([], 0). 
list_length([_|T], Length):- list_length(T, Length2), Length is Length2 + 1. 

quit_session(X):- X = bye, 
    nl, write('IT WAS NICE TALKING TO YOU USER, SEE YOU NEXT TIME!'). 

no_response_found(ListOfResponse):- 
    list_length(ListOfResponse, NumOfResponse), 
    NumOfResponse == 0, 
    write('I''M NOT SURE IF I UNDERSTAND WHAT YOU ARE TALKING ABOUT.'), !. 

no_response_found(_). 

get_keyword(KeyList, [KeyList,_]). 
get_response(RespList, [_, RespList]). 

select_response(RespList, Response):- 
    list_length(RespList, NumOfResponse), 
    IndexOfResponse is integer(random(NumOfResponse)), 
    select(IndexOfResponse, RespList, Response), !. 

select_response(_, _). 

find_match(Input, [FirstRecord|RestDatabase], ListOfResponse):- 
    get_keyword(Keyword, FirstRecord), 
    Keyword == Input, get_response(ListOfResponse, FirstRecord), !; 
    find_match(Input, RestDatabase, ListOfResponse). 

find_match(_, [_], _). 

chatterbot2:- 
    repeat, 
    nl, write('>'), 
    read(Input), 
    knowledge_base(ListOfRecord), 
    find_match(Input, ListOfRecord, ListOfResponse), 
    no_response_found(ListOfResponse), 
    select_response(ListOfResponse, Response), 
    write(Response), nl, 
    quit_session(Input). 

: 임의 값 =/= 0 : 0 포함

1 ?- chatterbot2. 

>'NOT IN BASE'. 
I'M NOT SURE WHAT ARE YOU TALKING ABOUT._G907 
는 빈 아규먼트 _G907의 값을 삭제 하시겠습니까?> 만 문장이 될 수 있습니까?

+0

명확히하기 위해 SWI 프롤로그로 변환하는 경우 질문에 명확하게 표시하고 태그를 추가하십시오. :) – Bart

+0

@ 바트 : 이미 완료되었습니다 :) – Tom

답변

0

이 특정 예제에서의 오류는 입력으로 인해 발생합니다. 입력 한 내용이 knowledge_base의 첫 번째 항목과 일치합니다. 입력 한 내용이 모두 일치하지 않으므로 반환되는 목록의 길이는 0이며 1을 초과하는 값이 필요할 것으로 보이는 임의의 호출에 문제가 발생합니다.

입력란에 '이름이 무엇입니까?'를 입력하십시오. 예를보고 작동하는지 확인하십시오.

+0

1? - chatterbot2. > '귀하의 이름은 무엇입니까?' 채팅을 할 수 있습니다 .2. 오류가 발생하지 않고 임의의 대답을 생성 할 수 있습니다. 오류 : 임의/1 : 도메인 오류 : 'not_less_than_one'예상, '0' 예외 : (7) select_response ([], _G485)? 크립 – Tom

+0

그 오류가 발생하면 임의의 지점에서 임의 값이 입력 값 0을 얻었음을 의미합니다. 그래서 그것이 일어나는 이유를 확인하고 그것을 피하려고 노력하십시오. 어쨌든,이 경우 그것은 예제의 한계입니다. knowledge_base에 명시 적으로 정의 된 항목 만 입력 할 수 있습니다. 그렇지 않으면 오류가 발생합니다. – Bart

+0

예를 들어 다른 값으로 변경되면. 666 -> ERROR가 사라지지만 여전히 나쁜 것이 하나 있습니다.보세요 : > 'Dog is black'. 정보를 알고있는 것이 확실한 지 확신하지 못합니다 ._G421 knowledge_base의 질문은 정상적으로 작동합니다. – Tom

관련 문제