목록의 목록인 요소를 중단하려고 합니까? [닫힘]
https://softwareengineering.stackexchange.com/questions/207637
-
29-09-2020 - |
문제
닫혔습니다.이 질문은 주제에서 벗어난입니다. 현재 답변을 받지 않습니다.
이 질문을 개선하고 싶으십니까?소프트웨어 엔지니어링 스택 교환에 대해 주제별이 되도록 질문을 업데이트하십시오.
7년 전 문을 닫았습니다.\"2013-08-09
이 질문 개선
다음을 만드는 프로그램을 작성하려고합니다.
?- g([2,3, [22,[3],9] ,4,[5],99],X).
X= [2,3,22,[3],9 ,4,5,99]
따라서 주어진 목록에서 목록을 검색하고 대괄호 []가 없는 요소로 대체합니다.
그래서 저는 이 프로그램을 작성했습니다.
첫 번째 블록은 목록의 첫 번째 요소인 목록을 검색합니다.
그러한 요소가 없으면 [there_is_no_list]
를 반환합니다.
first_list_in_the_list([],[there_is_no_list]):-!.
first_list_in_the_list([H|_],X):-is_list(H),X=H,!.
first_list_in_the_list([_|T],X):-first_list_in_the_list(T,X).
첫 번째 블록은 프롤로그에서 완벽하게 작동합니다.
두 번째 블록은 목록에서 요소 X를 검색한 다음 목록을 두 개의 목록으로 분할합니다. 하나는 X 이전의 모든 요소 목록이고 두 번째는 X 이후의 요소입니다.
splite_when_find_element([H|T],H,[],T):-!.
splite_when_find_element([H|T],X,F,G):-
splite_when_find_element(T,X,F1,G),append([H],F1,F).
Prolog에서도 잘 작동합니다.
세 번째 블록은 추가이고 두 개의 목록을 새 목록으로 결합합니다.
append([],L,L).
append([H|T],L,[H|U1]):- append(T,L,U1).
마지막 부분은 다음과 같습니다.
gg(L,L):-first_list_in_the_list(L,[there_is_no_list]),!.
gg(L,U):-first_list_in_the_list(L,X),
splite_when_find_element(L,X,F,G),gg(G,R),append(F,X,E),
append(E,R,U).
내가 query [2,[3],5]
를 줄 때 나는 또한 [2,[3],5]
를 얻고 그것이 왜 이것을 하는지 정말로 이해하지 못합니다.
해결책
당신의 논리는 결함이 있습니다.first_list_in_the_list 함수는 빈 목록이나 둘 이상의 요소가 있는 목록을 찾습니다.하나의 요소 목록은 무시됩니다.
제휴하지 않습니다 softwareengineering.stackexchange