コメント応答

> ども Plus です。

おぉ,勇者様が来てくださった!!

> ブログの更新速度についていけてないので、直近の問題のみコメントさせてもらいます。
> 私の英語読解力に問題があって思いっきり勘違いしているのかもしれませんが
> Exercise 10.3 の答えは何か違いませんか?
>
> Using `nthcdr’ and `car’, construct a series of expressions to
> return the first, second, third, and fourth elements of a list.
>
> は、「nthcdr と car を使用してリストの1番目/2番目/3番目/4番目を返す
> 一連の表現を作りなさい」なので、nth を実装することかなと解釈しました。
> #最も nth の説明で正にそのコードのサンプルが挙がっているので、
> #ここで課題として出てくるのも変な話ですが。

あー,まさに,Plus さんのおっしゃる通りです。
なんかしらないが,今日記見たら,どうやら私はとんちんかんなことを書いていたようです(笑)


で,まず,いいわけから。
最初,以下のようにしました。
「一連の表現」なので,「一連の表現」が jargon でない限り,
以下でもオッケー牧場という解釈は可能だと思いまんた。

(setq l '(owl sparrow swallow eagle crow))
;; first
(car (nthcdr 0 l))
; => owl

;; second
(car (nthcdr 1 l))
; => sparrow

;; third
(car (nthcdr 2 l))
; => swallow

;; fourth
(car (nthcdr 3 l))
; => eagle

んで,紆余曲折を経て,なんかしらんが,
rotate-yank-pointer をためしたくて。。。
で,kill-ring-yank-pointer の最初の3つを表示してみようと思い,
あんな感じになったのです。
なので,あれは,Plus さんのご指摘の通り,Exercise ではないですね。


実際試した日と,日記にした日が違うので,頭ん中がごちゃまぜになっているのれす〜。
ふっ。私って,いくつになっても,いい訳の下手な女ね。。。

> また whitypig さんの書かれた課題の方も考えてみました。
> リストの最初の n 個の要素のみを返す関数をこのように定義して、
> #n-elem の内容については、
> #8.3.1 kill-new function の説明にある通りの動きをしますが
> #setcdr が元のリストを破壊してしまうので、copy-sequence を使用しています。
>
> (defun n-elem (n lst)
> (let *1
> (setcdr (nthcdr (1- n) l) nil))
> l))
>
> その結果を dolist や mapcar を使用して処理する方が
> lisp 的な書き方じゃないかと思います。

ほぉー。なるほど。setcdr するために,(1- n) して nthcdr をとるんですね。
てか,この関数をノートに書きながら解読する際,
「when」と「while」を間違えて,ずーっとループに陥ってましたよ。(笑)
「おかしい,すでに3回ループしているのに,n の値が変わらん」,
「length の値がいつか変わるんだろうか?」やら
「オレはいつまでループしているんだろう?」とぶつぶついいながら(アホ)

> ・kill-ring-yank-pointer の最初の3つの要素をバッファに挿入
> (dolist (x (n-elem 3 kill-ring-yank-pointer))
> (insert (format "%s\n" (substring-no-properties x))))
>
> ・kill-ring-yank-pointer の最初の3つの要素(テキストプロパティなし)の
> リストを返す。
> (mapcar #'substring-no-properties (n-elem 3 kill-ring-yank-pointer))

copy-sequence とか mapcar は,まだ習っていないので,
習っていないことを使うと,担任の先生におこられますよ(笑)
勉強になります。

mapcar についてわからなかったので質問〜。

(mapcar 'substring-no-properties some-list)
と書いても同じ気がするんですが,「#」の意味がわかりませんでした。
Info から引用します。

   We sometimes write `function' instead of `quote' when quoting the
name of a function, but this usage is just a sort of comment:

     (function SYMBOL) == (quote SYMBOL) == 'SYMBOL

   The read syntax `#'' is a short-hand for using `function'.  For
example,

     #'(lambda (x) (* x x))

is equivalent to

     (function (lambda (x) (* x x)))

「function」って書くのが面倒だから,ていやーって「#'」で済ますのはわかったんですが,
「#」自体の意味と,mapcar の引数で「#'」を使用した場合と,「'」を使用した場合では,
何が違うんでしょうか?



最後に。Plus たんありがとう。
Plus たんかわいいよ,はぁはぁ。

*1:l (copy-sequence lst))) > (when (<= n (length l