당신은 기본적으로 매우 간단한 상태 머신 작성하는
- 모든 상태를 표현하기 위해 사용 기능 : (당신이 언어를 지정하지 않았기 때문에 나는 무작위 의사 코드를 사용합니다)
get_information():
return get_record()
ask_record():
record = read_line()
return() if !record
return ask_y(record)
ask_x(record):
x = read_line()
return ask_record() if !x
return ask_y(record, x)
ask_y(record, x):
y = read_line()
return ask_x(record) if !y
return ask_continue(record, x, y)
ask_continue(record, x, y)
continue = read_line()
return ask_y(record, x) if !continue
return (record, x, y)
이는 간단하다 접근. 일부 언어에서는 호출 스택이 커지며 그렇지 않은 경우 호출 스택이 커집니다. 당신은 스택 성장을 유발하는 언어가 있다면, 당신은 할 get_information
를 다시 작성하여,이를 방지하기 위해 트램폴린을 사용할 수 있습니다
x = get_information
while x is function:
x=x()
return x
ask_x(record):
x = read_line()
return (lambda: ask_record()) if !x
return (lambda: ask_y(record, x))
심지어 일부 question
구조에서 결과의 질문 메모리 주소를 추출 :
struct question {
question *next, *prev;
char prompt[];
char **result;
}
을 호출하고 -> 다음으로 이동하거나 결과에 NULL에 도달 할 때까지 -> prev를 호출합니다 (중지 조건, 결과가 채워지고 질문이없는 경우). 왼쪽).
직접적인 포인터 액세스로 명령형 언어를 사용하면 마지막 솔루션이 "가장 일반적인"것일 수 있습니다.
for 루프는 무엇입니까 (즉, 여러 수준의 중첩이 필요합니까?)? – Jason