2013-04-28 3 views
1

В основном я работаю над большей проблемой, но как бы мне вернуть список от 1 до номера n? Я новичок в этом и немного запутался. Кроме того, можно ли передать это как параметр в вызове функции?Prolog, возвращающий список от 1 до N

как check(newlist(1, N), [L | Rl]);

где newlist является вызов функции, которая возвращает список между 1 и N?

Извините, если моя терминология отключена. Похоже, это довольно простая проблема, но я все еще изучаю концепцию Prolog.

ответ

0

В Prolog у вас действительно нет функций, возвращающих значения. У вас есть предикаты, которые объединяют переменные. Имея это в виду, вы бы написать что-то вроде этого:

range(1, N, ResultOfRange), 
check(ResultOfRange, [L, Rl]). 

С учетом сказанного, думаю о базовом состоянии range, а затем выяснить, как вы бы построить на этом, чтобы сделать предикат, дающую целый ряд чисел.

0

Проверьте библиотеку Prolog. Например, в SWI-Prolog есть numlist/3. Вы можете передать предикат «по имени», предполагая, что вызываемый вызовет его с помощью call/N.

check(ListBuilder, N) :- 
    call(ListBuilder, 1, N, L), 
    ... 

main :- 
    check(numlist, 10), 
    ...