Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137

Написать функцию lookup

11.02.2016, 14:44. Показов 1302. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть список R, например R = [x/5, y/7, x/4]. Нужно написать функцию lookup(X,R,V), где x - наш атом, R - окружение, описанное ранее, и V - результат, в котором должны быть числа, которые находятся после / заданного атома. Далее есть еще функция

Prolog
1
2
3
4
5
6
7
8
9
eval(N,R) :- number(N).
 
eval(E,R) :-
        E =.. [Op,E1,E2], 
        member(Op,[+,-,*,/]),
        eval(E1,R1),
        eval(E2,R2),
        Ee =.. [Op,R1,R2],
        R is Ee.
test(V) :-
eval(2*3+4-6/2, V).
Функция eval вычисляет значение по правилам естественной семантики(Это аксиоматическая система, определяющая смысл каждой конструкции языка в виде вычисляемого ею значения.
)Надо совместить функции eval и lookup так, чтобы цифры из lookup передавались в eval.
Помогите пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2016, 14:44
Ответы с готовыми решениями:

Написать функцию Аккермана
Нужна помощь в написании. Visual Prolog 7.5 Написать функцию Аккермана. Эта функция часто используется для оценки способности...

Написать тригонометрическую функцию
Составить программу для нахождения по выбору значений тригонометрических функций sinx, cosx, tgx, ctgx. Остановка работы программы должна...

Как написать (примерно) в вба поисковую программу типо 'Lookup' в Excel'e?
Пожалуйста, подскажите, как написать (примерно) в вба поисковую программу типо 'Lookup' в Excel'e. Заранее, спасибо.

10
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
11.02.2016, 16:00
Вам обязательно eval, т.к. V is 2*3+4-6/2, это и есть eval.
Или R = 2*3+4-6/2, V is R.
Вы должны это были понимать, если уже использовали =.. и is.
В любом случае, в eval ошибка
Prolog
1
2
3
4
5
6
7
8
9
eval(N,N) :- number(N).
 
eval(E,R) :-
        E =.. [Op,E1,E2],
        member(Op,[+,-,*,/]),
        eval(E1,R1),
        eval(E2,R2),
        Ee =.. [Op,R1,R2],
        R is Ee.
С lookup тоже не совсем понятно.
Просто вытянуть число по ключу, так это
Prolog
1
2
3
?- R = [x/5, y/7, x/4], member(x/X, R).
R = [x/5, y/7, x/4],
X = 5 .
в список, ну
Prolog
1
2
3
?- R = [x/5, y/7, x/4], findall( X, member(x/X, R), Xs ).
R = [x/5, y/7, x/4],
Xs = [5, 4].
Уточняйте, что именно нужно... Это точно задача для Пролога?
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
11.02.2016, 16:08  [ТС]
arlat, В том то и дело, что преподаватель ничего толком не объяснил и мы сами не вполне понимаем, что тут происходит. Вы не могли бы пожалуйста рассказать, как работает eval? Как действует ..=? Что такое E1, E2, откуда они появляются? Расскажите пожалуйста, как все происходит. И вы сказали, что в eval ошибка и ниже вставили код eval, в котором я не нашел отличий от моего, может не замечаю что-то..
На всякий случай прикрепляю презентацию от препода:
ТВП-лк-01.zip
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
11.02.2016, 17:43
Цитата Сообщение от danek130995 Посмотреть сообщение
может не замечаю что-то
да, в первой строке eval(N,N), но не eval(N,R)

Какой Пролог?

Добавлено через 17 минут
Ну взят Пролог, назван языком Exp и приведен некий абстрактный пример.
А что надо-то, какая цель, задача?

Нет, ну можно что-то в таком роде
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
r([x/5,y/3,z/20]).
 
lookup(X,R,N) :-
  member(X/N,R).
 
eval(N,N) :- number(N).
eval(X,N) :- atom(X), r(R), lookup(X,R,N).
eval(E,R) :-
        E =.. [Op,E1,E2],
        member(Op,[+,-,*,/]),
        eval(E1,R1),
        eval(E2,R2),
        Ee =.. [Op,R1,R2],
        R is Ee.
некий смысл есть, хоть и с излишеством...
А именно, далее такой запрос
Prolog
1
2
3
?- E = x*3+y-z/2, eval(E,R).
E = x*3+y-z/2,
R = 8
Predicate =../2

6.5. Создание структур и работа с компонентами структур
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
11.02.2016, 18:39  [ТС]
arlat, с ..= разобрался, сейчас пытаюсь разобраться в Вашем решении.
что означает member(X/N,R)? Я просто знаю функцию member без дроби. А как это действует?
Что значит r(R)? Какой Вы вообще смысл вложили в это? Как получилось, что R = 8?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
12.02.2016, 08:35
Цитата Сообщение от danek130995 Посмотреть сообщение
что означает member(X/N,R)?
Самый обычный member, просто искомый элемент сразу сопоставляется с X и N, разделенными дробью.
Вот, посмотрите пример с Вашим списком:
Code
1
2
3
4
5
6
7
8
9
10
1 ?- R = [x/5, y/7, x/4], member(X/N,R).
R = [x/5, y/7, x/4],
X = x,
N = 5 ;
R = [x/5, y/7, x/4],
X = y,
N = 7 ;
R = [x/5, y/7, x/4],
X = x,
N = 4.
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
12.02.2016, 10:47  [ТС]
Black Fregat, а почему когда я спрашиваю
Prolog
1
36 ?- R = [x/5, y/7, x/4], member(y/7,R).
он выводит мне весь список
Prolog
1
R = [x/5, y/7, x/4]
вместо true?
Ведь если спросить
Prolog
1
37 ?- member(x/5, [x/5,x/6]).
то будет true.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
12.02.2016, 13:00
SWI выводит значения всех переменных, встречающихся в запросе
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
12.02.2016, 13:20  [ТС]
arlat, преподаватель еще говорил, что в eval должно быть 3 аргумента, третий - V - value.
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
12.02.2016, 15:13
Лучший ответ Сообщение было отмечено danek130995 как решение

Решение

Цитата Сообщение от danek130995 Посмотреть сообщение
преподаватель еще говорил, что в eval должно быть 3 аргумента, третий - V - value.
ну, правильно, тогда без излишеств
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
eval(N,_,N) :-
    number(N).
eval(X,R,V) :-
    atom(X),
    member(X/V,R).
eval(E,R,V) :-
    E =.. [Op,E1,E2],
    member(Op,[+,-,*,/]),
    eval(E1,R,V1),
    eval(E2,R,V2),
    Ee =.. [Op,V1,V2],
    V is Ee.
Prolog
1
2
?- eval(x*3+y-z/2, [x/5,y/3,z/20], V).
V = 8
Добавлено через 25 минут
Цитата Сообщение от Black Fregat Посмотреть сообщение
сопоставляется с X и N, разделенными дробью
и преподаватель по недосмотру или специально запутал оператор / со структурой /, наверное понятней следующее
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
eval(N,_,N) :-
    number(N).
eval(X,R,V) :-
    atom(X),
    member([X,V],R).
eval(E,R,V) :-
    E =.. [Op,E1,E2],
    member(Op,[+,-,*,/]),
    eval(E1,R,V1),
    eval(E2,R,V2),
    Ee =.. [Op,V1,V2],
    V is Ee.
Prolog
1
2
?- eval(x*3+y-z/2, [[x,5],[y,3],[z,20]], V).
V = 8
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
14.02.2016, 13:47  [ТС]
arlat, а почему функции lookup уже нет? Она же должна определять
Prolog
1
2
lookup(X,R,N) :-
  member(X/N,R).
Добавлено через 10 минут
arlat, все, я ее сам добавил:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
lookup(X,R,V) :-
  member(X/V,R).
 
eval(N,_,N) :-
    number(N).
eval(X,R,V) :-
    atom(X),
    lookup(X,R,V).
eval(E,R,V) :-
    E =.. [Op,E1,E2],
    member(Op,[+,-,*,/]),
    eval(E1,R,V1),
    eval(E2,R,V2),
    Ee =.. [Op,V1,V2],
    V is Ee.
 
test(V) :-
        eval(x*3+y-z/2, [x/5,y/3,z/20], V).
Добавлено через 16 минут
arlat, в программе разобрался сам, вот это глубина..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2016, 13:47
Помогаю со студенческими работами здесь

Написать функцию Факториал и программу, которая будет использовать эту функцию
Суть программы: Нужно написать функцию Факториал и программу.ю которая будет использовать эту функцию для вывода таблицы факториалов от 1...

Написать функцию. которая аргументом принимает тип происшествия и возвращает функцию
Написать функцию. которая аргументом принимает тип происшествия и возвращает функцию, которая принимает улицу и возвращает сообщение...

Написать функцию, которая, в зависимости от выбора пользователя вызывает соответствующую функцию
Помогите, что то я не могу понять задачи, даже не знаю с чего начать)))) 5. Написать функцию, которая, в зависимости от выбора...

Написать функцию, которая могла бы передать значение в другую функцию
как сделать функцию которая бы могла передать значеие в другую функцию ну к примеру a=4*b; где b=sin(fi);

Написать функцию, которая вычисляет минимум из четырех чисел. Использовать функцию min
package com.javarush.test.level02.lesson08.task04; public class Solution { public static int min(int a, int b, int c, int d) ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru