당신은 많은 일을 내가 쿼리 할 때
enterQuery:-
read(X),
processQuery(X).
processQuery(X):-
split_string(X," ", " ", L),
write(L),
test(L).
test(L):-
write([banana, apple]),
common_member(L,[banana,apple]),
write('successs').
common_member(Xs,Ys) :-
member(E,Xs),
member(E,Ys).
거짓 [바나나, 차] [바나나, 사과] 돌아 오기 당신이 보여주는 코드에서 불필요한 것들. 여기
내가 최상위 레벨에서 직접이 작업을 수행 할 방법은 다음과 같습니다
?- L = [banana, car], member(E, L), member(E, [banana, apple]).
L = [banana, car],
E = banana .
은 현재의 약자로 문제는 코드가 string
을 기대하고있다,하지만 당신은 그것을 원자를주는 것입니다. 귀하의 코드 :
?- enterQuery.
|: "banana car".
[banana,car][banana,apple]
false.
큰 따옴표에 유의하십시오.
여전히 문제가 있습니다 : 이제, 첫 번째 목록에서 banana
및 car
은 string
을하고, 두 번째 목록에서 banana
및 apple
원자이다.
또는 입증하기 :
?- read(X), string(X).
|: banana.
false.
?- read(X), string(X).
|: "banana".
X = "banana".
그래서 당신은 또한 당신이
[banana, apple]
에서
["banana", "apple"]
에 비교하는 목록을 만들 필요가있다.
여전히 매우 지저분한 코드이므로이 대답의 맨 위에있는 첫 번째 코드 단편에 입력하는 대신 read/1
으로 읽으려는 이유가 명확하지 않습니다.
편집 :
당신은 최상위 수준에서 문장을 입력해야하는 경우, 아무것도 (문자열을), (원자에 대한) 작은 따옴표 큰 따옴표를 포장, 여전히으로 입력에서 당신을 중지하지 은 술어에 대한 인수가입니다! 이로드와
string_words(S, Ws) :-
separators_string(Seps),
split_string(S, Seps, Seps, Ws).
separators_string(Seps) :-
findall(C,
(char_type(C, white)
; char_type(C, punct)
),
Cs),
string_chars(Cs, Seps).
: 여기
몇 가지 예제 코드입니다
?- string_words("banana car", Ws).
Ws = ["banana", "car"].
?- string_words("Hello, how are you doing?", Ws).
Ws = ["Hello", "how", "are", "you", "doing"].
나에게 잘 보이는.실제 상호 작용을 보여줄 필요가 있습니다. 단지 "거짓을 반환합니다"라고 말하는 것만으로는 충분하지 않습니다. –
@ 보리스 OK. 통역사 (swish prolog)에서 나는 다음과 같이 씁니다 : enterQuery. 프롬프트되면 나는 'banana car'라고 입력합니다. 내가 얻는 결과는 [바나나, 자동차] [바나나, 사과] 거짓 고마워! – JCR
아니요, 불만족 스럽습니다. 실제로 대화 형 음성 안내 내용을 질문에 복사하여 붙여 넣기 만하면됩니다. –