Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
bvn
6 / 5 / 0
Регистрация: 20.06.2010
Сообщений: 14
1

Составить список неповторяющихся случайных чисел

20.06.2010, 20:53. Просмотров 1634. Ответов 6
Метки нет (Все метки)

Пытаюсь разобраться с Visual Prolog (использую последний релиз 7301)
Если кто-то его раздербанил - отзовитесь, помогите разобраться с потоками
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2010, 20:53
Ответы с готовыми решениями:

Список случайных чисел из заданного промежутка.
Здравствуйте! не получается( Создайте предикат, порождающий по заданным...

...список, состоящий из случайного количества (но не более 10) случайных чисел от 0 до 100.
Доброго времени суток, господа знатоки. в общем поставили передо мной задачу:...

Предикат, порождающий по заданным числам N, M, K список, состоящий из N случайных натуральных чисел
Для данной программы, нужно сделать так, чтобы на выходе в списке не было...

Ввести с клавиатуры список целых чисел. Найти сумму чисел, которые входят в список по одному разу
Прошу помочь с заданием по Турбо Прологу. Мне кажется, что для людей которые...

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

6
bvn
6 / 5 / 0
Регистрация: 20.06.2010
Сообщений: 14
22.06.2010, 02:44  [ТС] 2
Вот превый вопрос.
Задача. Составить список не повторяющихся случ. чисел. Допустим, 10 из 10.
Вот что я придумал
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
implement main
    open core,math,list
 
constants
    className = "my/main".
    classVersion = "".
domains
    
class predicates    
    add_K:(unsigned_list,unsigned )nondeterm(o,i).
 
clauses
    classInfo(className, classVersion).
    add_K([],0):-!.
    add_K([H|T],K):-
        K>0,
        H=random(10)+1, % 0 мне не нужен
        not(isMember(H,T)), %отличен от хвоста
        I=K-1,
        add_K(T,I).
    
clauses
        run():-
        console::init(),
        main::add_K(L,10),stdio::nl,!,
        stdio::write(L),
        succeed().         % Нужно ли это?
       run().
end implement main
 
goal
    
    mainExe::run(main::run).
Выдает ошибку
error c603 : The flow pattern '(i,o)' does not exist for 'list::isMember/2'
т.е. не хочит находить элемент в списке, а почему?
0
rrrFer
Заблокирован
22.06.2010, 09:51 3
bvn, Мне кажется на этом форуме никто не пишет на Visual Prolog (возможно ошибаюсь конечно). Я могу решить эту задачу на турбо прологе, надо?
0
bvn
6 / 5 / 0
Регистрация: 20.06.2010
Сообщений: 14
22.06.2010, 18:42  [ТС] 4
Да, конечно.
Чесно говоря я только когда пытался разобраться с Прологом использовал Турбо. Сейчас попытался запустить из под него пару примеров - вылетат.
Скачал Визуал, по-сути это естественное и закономерное развитие Борландовское Турбо, но с существенными изменениями и дополнениями (я в него просто влюбился), но литературы крайне мало. Думаю, что подшаманить код - не составит особых проблем
0
bvn
6 / 5 / 0
Регистрация: 20.06.2010
Сообщений: 14
23.06.2010, 03:14  [ТС] 5
Цитата Сообщение от rrrFer Посмотреть сообщение
bvn, Мне кажется на этом форуме никто не пишет на Visual Prolog (возможно ошибаюсь конечно). Я могу решить эту задачу на турбо прологе, надо?
Visual Prolog не просто полноценный правопереемник ТП, но и насколько я увидел это самодостаточный и универсальный инструмент, типа С++, Дельфи, и т.д. Жаль что на Прологе и о Прологе мало пишут, литературы практически 0, особенно на русском языке. Придется как всегда - методом научного втыка.
Если у Вас есть возможность - помогите разобраться, постараюсь не надоедать
0
rrrFer
Заблокирован
23.06.2010, 08:11 6
http://wikiru.visual-prolog.com/inde...82%D0%B2%D0%B0
смотрел тут?

Добавлено через 4 часа 13 минут
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
domains     
    element=integer
    list=element*
predicates
    output(list)   
    input(list,integer,list)
    check(list,integer) 
    getnum(list,integer)
    addlst(list,list,integer)
 
    start
clauses     
    check([],_).
    check([X|_],X):-
        !,fail.
    check([_|T],X):-
        check(T,X). 
        
    getnum(L,N):-
        random(1000,NN),
        check(L,NN),
        N=NN.
    getnum(L,N):-
        getnum(L,N).
                    
    addlst(L,[H|L],H).
 
    output([]).
    output([H|T]):- 
        write(H),nl,
        output(T). 
    
    input(L,N,L):-
        N<1.
    input(L,N,L):-
        N>1000.
    input(L,N,LLL):-
        getnum(L,NN),
        addlst(L,LL,NN),
        NNN=N-1,
        input(LL,NNN,LLL).
 
    start:-      
        input([],10,L),
        output(L).
goal   
    start
Добавлено через 16 минут
Цитата Сообщение от bvn Посмотреть сообщение
Да, конечно.
Чесно говоря я только когда пытался разобраться с Прологом использовал Турбо. Сейчас попытался запустить из под него пару примеров - вылетат.
Скачал Визуал, по-сути это естественное и закономерное развитие Борландовское Турбо, но с существенными изменениями и дополнениями (я в него просто влюбился), но литературы крайне мало. Думаю, что подшаманить код - не составит особых проблем
VIP пятых версий компилировал код турбо пролога без изменений(только стала обязательна секция goal - это появилось вроде как для того чтобы пролог формировал более оптимальный кодза счет того, что вызываемые правила известны до выполнения программы). Новые версии вроде бы идут как полностью обьектно ориентированные, а значит что программы написаные для турбо пролога, да и VIP старых версий, теперь просто так не откомпилировать в новых версиях.
0
bvn
6 / 5 / 0
Регистрация: 20.06.2010
Сообщений: 14
26.06.2010, 15:58  [ТС] 7
Спасибо попробую Ваш вариант, хотя я кажется, нашел решение
Prolog
1
2
3
4
5
6
7
8
9
10
11
  sp(L,0):-
        assert(порядок(L)).
                
        sp(L,N):-
        X=random(32),   
        if not(is_Member(X,L)) then     
        Nn=N-1,
        sp([X|L],Nn)
        else
        sp(L,N)
        end if.
Тут смысл задачки в том, что нужен список случайных чисел (допустим 10) из именно 10 чисел, т.е.
выбор чисел ограничен 10 числами, и они не должны повторятся

Добавлено через 10 минут
Вызов
Prolog
1
2
 goal
 sp([],32),порядок(S),stdio::write("Список- ",S).
0
26.06.2010, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2010, 15:58

Создание списка случайных чисел
Текст программы Domains Sp=integer* Predicates Spisok...

Генерация случайного количества случайных чисел.
Всем привет, есть программа (код прилагается), генерирующая список, состоящий...

Вычисление суммы N случайных чисел из диапазона
люди помогите пожалуйста!!! Вычисление суммы N случайных чисел из диапазона...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru