问题描述
The selected items shall be returned in a list.
sash> (lotto-select 6 49)-> (23 1 17 33 21 37)
Hint: Combine the solutions of problems P22 and P23.
解法
(define lotto-select(lambda (N M)(rnd-select (range 1 M) N)))
问题描述
sash> (rnd-permu (a b c d e f))-> (b a d c e f)
Hint: Use the solution of problem P23.
解法
(define rnd-permu(lambda (ls)(rnd-select ls (length ls))))
大维基百科的原话: A palindrome is a word, phrase, number, or other sequence of >characters which reads the same backward or forward. 回文是一个结构,满足回文结构的事物从前或从后遍历元素得到的结果是相同的。具体事物的元素的单位可能是不…
问题描述
sash> (rotate (a b c d e f g h) 3)-> ((a b c) (d e f g h i k))
sash> (rotate (a b c d e f g h) -2)-> (g h a b c d e f)
Hint: Use the predefined functions length and append, as well as the result of problem P17.
解法
普通实现 按照题…
问题描述
原题目没有P29,这道题来源于水木的一个帖子。题目是这样的:
Use the unrestricted lambda to define a composition procedure compose-many that forms the composition of arbitrarily many procedures of one argument.Test your procedur…
Example:
sash> (last_but_one (a b c d))
sash> c
(1)跟P01类似,只多判断一个条件,即如果列表里只有一个元素,则返回#t。
(define last_but_one(lambda (ls)(if (null? ls)(raise not-found)(let ([lr (cdr…
若列表内包含重复出现的元素,则应只保留一个副本,且保持原列表元素的顺序。如
sash> (compress (a a a a b c c a a d e e e e))
sash> (a b c a d e)
问题分析
使用递归解决问题的好处在于能全局分析问题,从“局部“解决一个全局的…
问题描述
In how many ways can a committee of 3 be chosen from a group of 12 people? We all know that there are C(12,3) 220 possibilities (C(N,K) denotes the well-known binomial coefficients). For pure mathematicians, this result may be great. But we wan…
问题描述
a) In how many ways can a group of 9 people work in 3 disjoint subgroups of 2, 3 and 4 persons? Write a function that generates all the possibilities and returns them in a list.
sash> (group3 (aldo beat carla david evi flip gary hugo ida))-&…
问题描述
如果列表内包含有重复的元素且连续,则应当将它们放入单独的子列表内,如:
sash> (pack (a a a a b c c a a d e e e e))
sash> ((a a a a) (b) (c c) (a a) (d) (e e e e))
解法
(define pack(lambda (ls)(if (null? ls)…
问题描述
sash> (insert-at alfa (a b c d) 2)-> (a alfa b c d)
解法
(define insert-at(lambda (e ls n)(let f ([ls ls] [n n])(cond[(null? ls) ()][( n 1) (cons e ls)][else (cons (car ls) (f (cdr ls) (- n 1)))]))))
问题描述
sash> (remove-at (a b c d) 2)-> (a c d)
解法
(define remove-at(lambda (ls k)(let f ([i 1] [s ls])(cond[(null? s) ()][( i k) (cdr s)][else (cons (car s) (f ( i 1) (cdr s)))]))))
问题描述
Do not use any predefined predicates(functions).
sash> (split (a b c d e f g h i k) 3)
sash> ((a b c) (d e f g h i k))
题目要求“自己动手,丰衣足食“。
解法
尾递归实现 (define split(lambda (ls n)(let f ([i 1][ls1 ()][ls2 ls])(…
问题描述
The selected items shall be returned in a list.
sash> (rnd-select (a b c d e f g h) 3)-> (e d a)
Hint: Use the built-in random number generator and the result of problem P20.
解法
(import (srfi 27))(define rnd-select(lambda (ls n)(let f…
问题描述
sash> (drop (a b c d e f g h i k) 3)
sash> (a b d e g h k)
解法
(define drop(lambda (ls n)(let f ([s ls][i 1])(cond[(null? s) ()][( i n) (f (cdr s) 1)][else (cons (car s) (f (cdr s) ( i 1)))]))))
问题描述
实现游程编码。在P11中我们利用到了中间的计算结果–P09生成的连续重复的元素列表,该问题要求不创建这个中间结果,而仅仅利用这些元素的个数。如
sash> (encode-modified (a a a a b c c a a d e e e e))
sash> ((4 a) b (2 c) (2 a) d…
问题描述
该题是实现P11的逆操作,即将P11编码过的列表进行解码。如
sash> (decode ((4 a) b (2 c) (2 a) d (4 e)))
sash> (a a a a b c c a a d e e e e)
解法
递归实现 思路:(1) 将(N E)转换为(E ... E)列表形式,单独的E转换为(E…
问题描述
sash> (repli (a b c) 3)
sash> (a a a b b b c c c)
解法
(define repli(lambda (ls n)(let f ([s ls][m n])(if (null? s)()(if (zero? m) (f (cdr s) n) (let ([e (car s)]) (cons e (f s (- m 1)))))))))
与上一个P14类似,也可将每个元素重…
问题描述
a) We suppose that a list contains elements that are lists themselves. The objective is to sort the elements of this list according to their length. E.g. short lists first, longer lists later, or vice versa.
sash> (lsort ((a b c) (d e) (f g h…
问题描述
Given two indices, I and K, the slice is the list containing the elements between the I’th and K’th element of the original list (both limits included). Start counting the elements with 1.
sash> (slice (a b c d e f g h i k) 3 7)
sash> (c…
列表第一个元素所在的位置为1。 Example:
sash> (element-at (a b c d e) 3)
sash> c
(1)自己造轮子 因为列表的内存分配并不一定是连续的,所以要访问第K个位置的元素,只能从head出发,直到第K个位置…
译者: con Copyright (c) 1985 Free Software Foundation, Inc; See end for conditions. You are looking at the Emacs tutorial. Emacs 的命令通常包括控制键(就是上面标有 Ctrl或Ctl的那个)或者是META键(上面标有EDIT或ALT)。为了方便起见我们将用下面的缩写来代…
问题描述
在P10的算法实现中,若一个元素不连续重复,我们最终也转化为(N E)的形式,即N为1的特殊形式。 该题的要求是特殊处理这一情况,直接将元素复制到结果列表中。如
sash> (encode-modified (a a a a b c c a a d e e e e)…
出 处:http://hp.envir.online.sh.cn/vega/hacker.htm作 者:Eric S. Raymond 本篇原作者为Eric S. Raymond esrsnark.thyrsus.com,他是一位大哥级的 Hacker,写了很多自由软件,知名著作有Jargon File等,近…
问题描述
使用P09的结论来实现所谓的游程编码,这是一种数据压缩的方法。连续重复的元素会编码成(N E)形式的列表,其中N为元素E重复的次数。如
sash> (encode (a a a a b c c a a d e e e e))
sash> ((4 a) (1 b) (2 c) (2 a) (1 d) (4 e))
解法…
鉴于之前的翻译很多别扭的地方,尤其是该题的duplicate和下一题的replicate,不用一长串汉字是描述不清楚的。所有从该题之后,题目统一用英文吧。
问题描述
sash> (dupli (a b c c d))
sash> (a a b b c c c c d d)
解法
(define dup…
;CAD的lisp程序来批量搜索文字并标记.lsp
(defun rg-Split (s p / L r)(setq r (vlax-create-object "vbscript.regexp"))(vlax-put-property r Global 1)(vlax-put-property r Pattern p)(read (strcat "(\"" (vlax-invoke r Replace s "\"…
;CAD的lisp程序来批量搜索文字并标记.lsp
(defun rg-Split (s p / L r)(setq r (vlax-create-object "vbscript.regexp"))(vlax-put-property r Global 1)(vlax-put-property r Pattern p)(read (strcat "(\"" (vlax-invoke r Replace s "\"…
一个计算机大师的人生教训[原译](附原文)
Richard Gabriel, LISP语言的创造者,是UNIX时代的人物。 他写的 Patterns of Software 听上去好象讲的是Patterns, 却有一大部份是讲他自己如何从一个穷乡僻壤一步一步艰难的走进斯坦福的历程。下面我特地译出一…