1

リストのリストのリストを取り (心配しないで、例を挙げます)、最後の要素を少なくとも 1 つに変換しようとしています。これは私がこれまでに行ったことです:

(defun cost(state)
(let ((list_elements '()))
(dolist (element state)
  (dolist (subElement element)
    (setq list_elements (append list_elements (list subElement))))
finally (return list_elements))))

例:

(list
(list
    (list
        (list 1 9 't121) 
        (list 1 10 't122))
    (list
        (list 2 10 't123)
        (list 2 11 't124)))
(list
    (list
        (list 1 9 't121)
        (list 1 11 't132))
    (list
        (list 2 11 't133)
        (list 2 12 't134))))

だから、これは戻るはずです ((1 9 T121) (1 10 T122) (2 10 T123) (2 11 T124) (1 9 T121) (1 11 T132) (1 11 T132) (2 11 T133) (2 12 T134)) そしてそれは戻ってくるだけです((1 9 T121) (1 11 T132))

その後、リスト内のさまざまな要素の数を数えることになっています。

この機能の問題は誰にも分かりますか?

4

1 に答える 1

1
(defun double-append (list)
  (reduce #'append (reduce #'append list)))

;; or like this:
(defun mapcan-mapcon (list)
  (mapcan #'append (mapcon #'car list)))

(double-append (list
 (list
  (list
   (list 1 9 't121) 
   (list 1 10 't122))
  (list
   (list 2 10 't123)
   (list 2 11 't124)))
 (list
  (list
   (list 1 9 't121)
   (list 1 11 't132))
  (list
   (list 2 11 't133)
   (list 2 12 't134)))))

((1 9 T121) (1 10 T122) (2 10 T123) (2 11 T124) (1 9 T121) (1 11 T132)
 (2 11 T133) (2 12 T134))

これまでのところ、予想される結果から、それはそのようなものに違いないと言えます。

;; Using Alexandria, just as an example, of how currying can save
;; some repetitive coding:
(ql:quickload "alexandria")
(defun curried-append ()
  (let ((reducer (alexandria:curry #'reduce #'append)))
    (alexandria:compose reducer reducer)))

(funcall
 (curried-append)
 (list
  (list
   (list
    (list 1 9 't121) 
    (list 1 10 't122))
   (list
    (list 2 10 't123)
    (list 2 11 't124)))
  (list
   (list
    (list 1 9 't121)
    (list 1 11 't132))
   (list
    (list 2 11 't133)
    (list 2 12 't134)))))
于 2012-11-28T17:23:11.293 に答える