Получите Последний Элемент каждого списка

Можно использовать ОБЪЕДИНИТЬ функцию в SQL MS.

INSERT INTO t (значение) ЗНАЧЕНИЯ (ОБЪЕДИНЯЮТ (@value, 'что-то'))

Лично, я не являюсь сумасшедшим об этом решении, поскольку это - кошмар обслуживания, если Вы хотите изменить значение по умолчанию.

Мое предпочтение было бы предложением Продавцов Mitchel, но это не работает в SQL MS. Не может говорить с другой DBMS SQL.

5
задан Inaimathi 5 September 2013 в 14:30
поделиться

4 ответа

Assuming this is about Common Lisp, there is a function last which returns a list containing the last item of a list. If you use this function with mapcan, which applies a given function to each element of a list and returns the concatenated results, you'll get what you want.

Note though that accessing the last element of a list is an O(N) operation, so if this isn't just homework after all, you might want to consider if you can't solve the real problem more efficiently than taking the last item of each list (maybe use another datastructure instead).

9
ответ дан 13 December 2019 в 05:38
поделиться

Напишите процедуру, которая возвращает последний элемент списка, затем узнайте немного о встроенной процедуре MAP (также известной как MAPCAR ) и посмотреть, погаснут ли какие-нибудь лампочки.

0
ответ дан 13 December 2019 в 05:38
поделиться

Это, как и большинство ранних задач LISPy, представляет собой упражнение на рекурсивное мышление и / или мышление в терминах индукции. Для начала нужно задать себе простые вопросы, на которые вы легко сможете ответить.

Например, если бы вас попросили написать что-то, что дает вам первый элемент в каждом списке, я бы сказал об этом так:

] Дан список списков:

  1. Что является первым элементом каждого списка в списке '() ? (легко - null )
  2. Что является первым элементом каждого списка в списке '(a) ? (легко - a , или, возможно, ошибка)
  3. Что является первым элементом каждого списка в списке '((a)) ? (легко - (a) )
  4. Что является первым элементом любого списка в форме '(что угодно) , где хоть список? (легко - (первое что-нибудь) )
  5. Какой первый элемент каждого списка в форме '(что-нибудь еще) ? (легко - (минусы (первое что-либо) (первый элемент - еще один материал)) )
  6. Что является первым у атома? либо атом, либо ошибка (зависит от вашей точки зрения)
  7. Что является первым из нуля? nil .
  8. Что стоит первым в списке? (список автомобилей)

Отсюда мы можем начать писать код:

;; here's first, meeting questions 6-8
(define first (lambda (l)
  (cond 
    ((null? l) nil) ; Q7
    ((atom? l) l)   ; Q6
    (t (car l)))))  ; Q8

;; with first we can write first-element, meeting questions 1-5
(define first-element (lambda (l)
  (cond
    ((null? l) nil) ; Q1
    ((atom? l) (first l))   ; Q2
    (t (cons (first (car l) (first-element (cdr l)))))))) ; Q4-5

Теперь это не ваша домашняя работа (намеренно). Вы должны поиграть с этим и понять, как это работает. Вашей следующей целью должно быть выяснить, чем это отличается от вашего задания и как его достичь.

Что касается MAPCAR? Не беспокойся об этом. Сначала вам нужно научиться решать рекурсивные задачи. Тогда вы можете беспокоиться о MAPCAR. В чем смысл этого задания? Чтобы помочь вам научиться думать в этом режиме. Черт возьми, около все в LISP / Scheme решается таким образом.

Причина, по которой я пошел со всеми вопросами, чтобы разбить его на части, которые меня беспокоят. Если мне задают задачу «как мне выполнить foo для каждого элемента в списке?» Я должен ответить на вопросы: как мне обрабатывать null? Как обращаться с атомом? Как мне обработать первый элемент в списке? Как мне справиться со всем остальным? Как только я на это отвечу, я пойму, как на самом деле делать foo. Как мне сделать foo на null? Как мне сделать foo на атоме? Как сделать foo в списке?

Причина, по которой я пошел со всеми вопросами, чтобы разбить их на части, которые меня беспокоят. Если мне задают задачу «как мне выполнить foo для каждого элемента в списке?» Я должен ответить на вопросы: как мне обрабатывать null? Как обращаться с атомом? Как мне обработать первый элемент в списке? Как мне справиться со всем остальным? Как только я на это отвечу, я пойму, как на самом деле делать foo. Как мне сделать foo на null? Как мне сделать foo на атоме? Как мне сделать foo в списке?

Причина, по которой я пошел со всеми вопросами, чтобы разбить их на части, которые меня беспокоят. Если мне задают задачу «как мне выполнить foo для каждого элемента в списке?» Я должен ответить на вопросы: как мне обрабатывать null? Как обращаться с атомом? Как мне обработать первый элемент в списке? Как мне справиться со всем остальным? Как только я на это отвечу, я пойму, как на самом деле делать foo. Как мне сделать foo на null? Как мне сделать foo на атоме? Как сделать foo в списке?

затем я выясняю, как на самом деле делать foo. Как мне сделать foo на null? Как мне сделать foo на атоме? Как мне сделать foo в списке?

затем я выясняю, как на самом деле делать foo. Как мне сделать foo на null? Как мне сделать foo на атоме? Как мне сделать foo в списке?

3
ответ дан 13 December 2019 в 05:38
поделиться

вероятно, она уже решена, но я понял это

; SELECT-FROM-INNER-LIST :: [list] -> [list]
(DEFUN SFIL (lst)
  (COND ((NULL lst) NIL)
        ((LISTP (FIRST lst)) (APPEND (LAST (FIRST lst)) (SFIL (REST lst))))
))

Теперь это работает для легального списка ... поэтому, если вы вызовете функцию SFIL с правильным списком ... в противном случае она вернет NIL

надеюсь, это будет полезно для всех, кто его найдет

0
ответ дан 13 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: