2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
||||||
1 | ||||||
Сконструировать \lambda-вызов и вычислить его значение Lambda06.11.2014, 22:12. Показов 1566. Ответов 13
Метки нет (Все метки)
Задание
Для выражения из таблицы согласно номеру варианта сконструировать \lambda - вызов и вычислить его значение. Присваивать полученное значение символу не нужно.
(expt x y) - это х в степени у, т.е. xy а вот (exp x) - это ex сделал код лисп и вставляю comon lisp, нет результата=\ Как правильно сделать функцию? Заранее благодарю.
0
|
06.11.2014, 22:12 | |
Ответы с готовыми решениями:
13
Для выражения сконструировать λ-вызов и вычислить его значение Для выражения сконструировать λ –вызов и вычислить его значение Для выражения сконструировать λ-вызов и вычислить его значение LAMBDA - выражение |
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|||||||||||
06.11.2014, 22:31 | 2 | ||||||||||
Сообщение было отмечено Walimas как решение
Решение
Правильно - вот так:
1) У cond-а каждая ветка своей скобке:
2) В первой ветке условие должно быть (> 1 ...): единица должна быть больше. 3) and во второй ветке не нужен (хотя ничего плохого от него нет, так что не ошибка). 4) ( >=2) - это какая-то жертва войны правок. Заметьте, что нужно разделить пробелом, а то >=2 - единый символ. 5) - 2 (через пробел) - это минус отдельно, 2 отдельно. Число -2 надо писать без пробела. Пробелы разделяют, скобки группируют. Это почти весь синтаксис. Добавлено через 2 минуты Такого не бывает. Какой-то результат всегда будет. Обычно при наличии ошибок появляются полезные сообщения. Не мешало бы их почитывать, да и на форум можно постить.
2
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
|
07.11.2014, 04:12 [ТС] | 3 |
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||||||
07.11.2014, 06:36 | 4 | |||||
Сообщение было отмечено Walimas как решение
Решение
(< a b) в обычной математической записи означает a < b. "Меньше a, чем b": лисп - язык с необычным порядком слов: глагол на первом месте.
Правильно сказать вот так: Ctrl+C, Ctrl+V. Например, я ввожу ваше выражение в репл (SBCL), получаю следующий результат: Код
; in: ; (LAMBDA (X Y) (COND ((< 1 (EXPT # 2)) (EXP (+ X Y)) ((AND #) (EXP #)) (T 1)))) 0.2 ; ((AND (>=2)) (EXP (EXPT (+ Y X) 2))) ; ; caught ERROR: ; illegal function call ; ((LAMBDA (X Y) (COND ((< 1 #) (EXP #) (# #) (T 1)))) 0.2 - 2) ; --> SB-C::%FUNCALL ; ==> ; (#<SB-C::CLAMBDA ; :%SOURCE-NAME SB-C::.ANONYMOUS. ; :%DEBUG-NAME (LAMBDA (X Y)) ; :KIND NIL ; :TYPE #<SB-KERNEL:BUILT-IN-CLASSOID FUNCTION (read-only)> ; :WHERE-FROM :DEFINED ; :VARS (X Y) {CB7F6E9}> ; 0.2 - 2) ; ; caught WARNING: ; function called with three arguments, but wants exactly two ; See also: ; The ANSI Standard, Section 3.2.2.3 ; ; caught WARNING: ; The function T is undefined, and its name is reserved by ANSI CL so that even ; if it were defined later, the code doing so would not be portable. ; ; compilation unit finished ; Undefined function: ; T ; caught 1 ERROR condition ; caught 2 WARNING conditions invalid number of arguments: 3 [Condition of type SB-INT:SIMPLE-PROGRAM-ERROR] Код
; in: LAMBDA (X Y) ; ((AND (>=2)) (EXP (EXPT (+ Y X) 2))) ; ; caught ERROR: ; illegal function call ; in: LAMBDA (X Y) ; (T 1) ; ; caught WARNING: ; The function T is undefined, and its name is reserved by ANSI CL so that even ; if it were defined later, the code doing so would not be portable. ; ; compilation unit finished ; Undefined function: ; T ; caught 1 ERROR condition ; caught 1 WARNING condition
Код
; (>=2) ; ; caught STYLE-WARNING: ; undefined function: >=2 ; ; compilation unit finished ; Undefined function: ; >=2 ; caught 1 STYLE-WARNING condition Ничего плохого нет, чтобы спросить на форуме. Но вы могли и сами это сделать. Если вы игнорируете то, что пишет интерпретатор или компилятор, вам очень тяжко будет дебажить. PS В лиспе не пользуются большими буквами, lambda - не исключение.
3
|
Модератор
|
||||||
07.11.2014, 12:55 | 5 | |||||
А чтобы не перевычислять одно и то же, можно поступить так:
2
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
||||||
07.11.2014, 17:34 | 6 | |||||
Не по теме: helter, и не лень Вам иной раз такие простыни писать?
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,589
|
|
07.11.2014, 17:59 | 7 |
castorsky, зачем ты неправильный код повторил?
1
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
||||||
07.11.2014, 18:17 | 8 | |||||
ага, шлёма, так веселей
0
|
helter
|
07.11.2014, 18:18
#9
|
0
|
castorsky
|
07.11.2014, 18:24
#10
|
Не по теме: Понятней в книгах, тут от лени или праздности. Впрочем, оставим.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,589
|
||||||
07.11.2014, 20:08 | 11 | |||||
2
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
||||||
08.11.2014, 13:13 | 12 | |||||
Неистовые продолжения
1
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
|
09.11.2014, 09:57 [ТС] | 13 |
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
09.11.2014, 15:29 | 14 |
0
|
09.11.2014, 15:29 | |
09.11.2014, 15:29 | |
Помогаю со студенческими работами здесь
14
Конструкции локальных определений LET і LAMBDA В чем разница между let и lambda Как работают lambda выражения? %EXPAND-FORM: (EQL N 0) should be a lambda expression Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |