터보 프롤로그에서 다음과 같은 문제를 해결해야합니다. "목록의 숫자로 표시된 숫자의 제품을 주어진 숫자로 확인하십시오. 예 : [1 9 3 5 9 9] * 2 -> [3 8 7 1 9 8] "입니다.목록이있는 프롤로그 프로그램
이 문제를 해결하기위한 내 생각은 내가 먼저 제품을 계산 한 다음 그 숫자를 목록에 넣는 것입니다. 단지이 마지막 부분 만 생각할 수는 없습니다. 내 소스 코드는 지금까지
입니다.도메인
list=integer*
조건
length(list,integer)
powerten(integer,integer)
product(integer,list,integer) /* this predicate computes the product */
/* the product,powerten and length are taken care of */
addDigit(integer,list) /* this predicate should decompose the number in its digits and put them in the list */
productList(integer,list,list)
조항
length([],0).
length([_|T],L):-
length(T,L1),
L=L1+1.
powerten(0,1):-!.
powerten(L,N):-
L1=L-1,
powerten(L1,N1),
N=N1*10.
product(_,[],0):-!.
product(NR,[H|T],RESULT):-
length([H|T],LEN),
L2=LEN-1,
powerten(L2,N),
product(NR,T,R1),
RESULT=R1+H*N*NR.
addDigit(0,[]):-!.
addDigit(NR,[NR|_]):-
NR>0,
DIGIT = NR MOD 10,
NR1=NR DIV 10,
addDigit(NR1,_).
productList(NR,L1,L2):-
/* this is the "main" predicate . Its arguments are NR - the first factor, L1- the
initial list, whose digits make the second factor, L2 - the result list which
contains the digits of he result */
product(NR,L1,RESULT),
addDigit(RESULT,L2).
위에서 볼 수 있듯이 addDigit 조건부까지는 모두 정상입니다. 제품의 숫자를 최종 목록에 추가하는 방법을 찾지 못했습니다. 누구든지 해결책을 도울 수 있습니까? 감사합니다. .
덕분에, 내 시도 솔루션보다 실제로 훨씬 더 간단합니다 – user2899733