アプリ版:「スタンプのみでお礼する」機能のリリースについて

(setq ary '((A . 1) (B . 2) (C . 3)))
で、perlでの

$ary{'A'}++; や
$ary{'B'}='X' や
$ary{'C'}=$ary{'A'}+5;
ということをさせたいのですが、LISPではどう書くのでしょうか?

(assoc 'A ary)
2

(assoc 'B ary)
X

(assoc 'C ary)
7

という結果が欲しいです。
また、一度にaryの内容を表示させる Data::DumperのようなものはLISPにあるのでしょうか?

処理系はCommon LISPです。

A 回答 (2件)

(setq ary '((A . 1) (B . 2) (C . 3)))



(defun sample ()
;;(print ary)
(setf
(cdr (assoc 'A ary))
(1+ (cdr (assoc 'A ary))))
(setf
(cdr (assoc 'B ary))
(* 2 (cdr (assoc 'B ary))))
(setf
(cdr (assoc 'C ary))
"mogera")
;;(print ary)
)

c:\tmp\0519>clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2006

[1]> (load "sss.l")
;; Loading file sss.l ...
;; Loaded file sss.l
T
[2]> (pprint ary)

((A . 1) (B . 2) (C . 3))

[3]> (pprint #'sample)

#<FUNCTION SAMPLE NIL (DECLARE (SYSTEM::IN-DEFUN SAMPLE))
(BLOCK SAMPLE (SETF (CDR (ASSOC 'A ARY)) (1+ (CDR (ASSOC 'A ARY))))
(SETF (CDR (ASSOC 'B ARY)) (* 2 (CDR (ASSOC 'B ARY))))
(SETF (CDR (ASSOC 'C ARY)) "mogera"))>

[4]> (sample)
"mogera"
[5]> (pprint ary)

((A . 2) (B . 4) (C . "mogera"))

[6]>
    • good
    • 0

以下はxyzzyでの実行結果です。


----
(setq ary '((A . 1) (B . 2) (C . 3)))
((A . 1) (B . 2) (C . 3))
(mapcar #'(lambda (list) (cond ((eq 'A (car list)) (cons (car list) (1+ (cdr list)))) (t list))) ary)
((A . 2) (B . 2) (C . 3))
----
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!