Помогите с задачкой. Задача такая: удалить из начала списка указанное количество элементов. При этом надо использовать спискоразрушающие функции. Я сделал вот так:
(DEFUN F (LIST N)
(COND ((= N 0) LIST)
(T ((lambda(result) (RPLACA(RPLACD LIST(cdr result)) (car result)))
(F (cdr LIST)(- N 1))))))
Только когда вводишь например:
(F "(1 2 3) 4) – т.е. удалить 4 элемента он говорит, что NIL- bad argument type. Как от этого избавиться, просто чтобы он NIL давал?
И объясните пожалуйста, что за функция lambda, я до конца не понимаю и можно ли здесь обойтись без нее?
18 ноября 2009 в 0:02
//paste.lisp.org/display/90617
Чёрт, ты лучше прекрати говорить "я не могу разобраться", и начни говорить "сделайте мне лабу, я не шарю". Так ведь честнее.
Так хотя бы никто не станет кормить тебя лямбдами.
17 ноября 2009 в 22:03
Вроде усвоил. Спасибо большое.
17 ноября 2009 в 22:03
См. тж. //en.wikipedia.org/wiki/Lambda_calculus
17 ноября 2009 в 22:00
Если не хочешь отвечать – не отвечай, сам разбирусь.
17 ноября 2009 в 22:00
Покажи, в каких источниках ты читал про lambda, и укажи на непонятные места в объяснениях.
На javas?1?ript умеешь писать? function(x) {return x+5;} – это абсолютно то же самое, что и (lambda (x) (+ x 5)).
17 ноября 2009 в 21:05
Берёт и работает… Сформулируй внятно вопрос и сам поймёшь ответ.
17 ноября 2009 в 20:03
Это я прочитал… А как работает не улавливаю никак…
17 ноября 2009 в 20:02
ок, ок. лямбда – это безымянная функция. теперь понятно?
17 ноября 2009 в 19:05
Не понимаю я как переделать, прочитал про lambda везде. Не знаю как поправить без него или разобратся как с ним работает.
17 ноября 2009 в 19:05
Помогите, пожалуйста.
17 ноября 2009 в 19:02
можно без lambda, тем же defun. но это то же самое, только писать больше.
17 ноября 2009 в 18:05
Помогите, пожалуйста, это лабораторная, никак не могу разобратся, особенно с lambda. И поставил проверку(NULL LIST) он мне вообще стал NIL возвращать.
17 ноября 2009 в 18:05
Может можно без lambda?
17 ноября 2009 в 18:03
Просто надо использовать спискоразрушающие функции. Так то без них вот так и все:
(DEFUN D (X K)
(COND ( (= K 0)X)
( (> K 0) (D (cdr X) (- K 1) ) ) ) )
17 ноября 2009 в 18:02
Сделал по примеру, а до конца не догоняю, что за lambda и можно ли без нее вообще обойтись?
17 ноября 2009 в 18:02
Рекурсию юзай.
Первая и последняя строки верны, средняя бредятина какая-то.
И конечно он тебе выдаст bad argument, если из списка 3 элементов ты пытаешься удалить 4.
На определенном шаге функция попытается вызвать cdr для NIL и выдаст тебе ошибку.
Сделай проверку типа (NULL LIST)
17 ноября 2009 в 18:01
А, извиняюсь, как ты умудрился сделать "вот так", не понимая, что значит lambda? Смею предположить, сделал не сам?