我想有一个带有单个参数的CL函数,但也有一个默认参数值.
(defun test1 ((x 0))
(+ x x))
Run Code Online (Sandbox Code Playgroud)
似乎是语法,但它不起作用.我看到的教程只有与&optional和&key一起使用时才有上面的参数 - 默认形式.是否可以只有一个函数参数并且它具有默认值?
在这段代码中
(defun foo ()
. . .
(let ((bar (foo)))
(if bar
. . .)))
Run Code Online (Sandbox Code Playgroud)
在let行,let是唯一有约束力的,对不对?它实际上并没有运行foo.我假设foo在if语句中第一次运行(递归),对吗?如果我认为是正确的,有没有办法let实际执行foo,然后将结果分配给bar?
在这种对letlambda 演算版本的处理let中给出
(\f.z)(\x.y)
Run Code Online (Sandbox Code Playgroud)
用词
ff x = y 在表达式中 由 定义z,然后作为
let f x = y in z
Run Code Online (Sandbox Code Playgroud)
我从初学者的角度知道 Haskell 是如何let工作的,即定义遵循let并且表达式(对这些定义做一些事情)遵循in.
let <definitions> in <expression>
Run Code Online (Sandbox Code Playgroud)
但是这种最一般的 lambda 演算描述令人困惑。例如,我假设可能有一个 Haskell lambda 函数版本的let f x = y in z. 有人可以在 Haskell 中写出这个 - 也许举一两个例子 - 吗?只是猜测,似乎第一个 lambda 函数需要第二个 lambda 函数——不知何故?
(\x -> y)(\f -> z)
Run Code Online (Sandbox Code Playgroud)
但这只是一个猜测。
I have this code
data Slist a = Empty | Scons (Sexp a) (Slist a)
data Sexp a = AnAtom a | AnSlist (Slist a)
data Fruit = Peach | Apple | Pear | Lemon | Fig deriving (Show,Eq)
sxOccurs oatm sxp =
let slOC Empty = 0
slOC (Scons se sls) = (seOC se) + (slOC sls)
seOC (AnAtom atm) = if (atm == oatm) then 1 else 0
seOC (AnSlist sla) = slOC sla
in seOC sxp
Run Code Online (Sandbox Code Playgroud)
As …
我正在尝试创建一个函数,该函数将接受一个字符串并显示它。
(defun closing (s)
(format t "~{~a~}" ("Sincerely," "\n" s)))
Run Code Online (Sandbox Code Playgroud)
我希望得到的是
真挚地,
坦率
如果“弗兰克”是我传入的字符串。它抱怨变量 S 已定义但从未使用过。我究竟做错了什么?
尝试单独使用格式:如果我urname将 defparameter声明为“Frank”,则以下内容不会打印 Frank,而只是变量名称。(没有引用它抱怨 urname 不是一个函数。)
(format t "~{~a~}" '(urname urname urname))
Run Code Online (Sandbox Code Playgroud)
如何提供变量以进行格式化?
这段代码
(defun arabic_to_roman (filename)
(let ((arab_roman_dp '())
(arab nil)
(roman nil))
(with-open-file (in filename
:direction :input
:if-does-not-exist nil)
(when in
(loop for line = (read-line in nil)
while line do
(setq arab (subseq line 0 (search "=" line)))
(setq roman (subseq line (1+ (search "=" line)) (length line)))
(setf arab_roman_dp (acons arab roman arab_roman_dp))
;(format t "~S ~S~%" arab roman)
)))
(with-open-file (stream #p"ar_out.txt"
:direction :output
:if-exists :overwrite
:if-does-not-exist :create )
(write arab_roman_dp :stream stream :escape nil :readably nil))
'done!)) …Run Code Online (Sandbox Code Playgroud) 我有这个:
(let ((num 1))
(mapcar (lambda (x)
(cons x (if (evenp (setf num (random 299)))
(1+ num)
(num))))
'(a b c d e f)))
Run Code Online (Sandbox Code Playgroud)
应该产生这样的东西:
((A . 37) (B . 283) (C . 232) (D . 251) (E . 273) (F . 170)
Run Code Online (Sandbox Code Playgroud)
只有奇数.是的,很奇怪的样子.有什么东西random-state可以帮助吗?或者保留初始random计算的"隐藏系统变量" ?这是我尝试过的全局函数:
(defun random-odd ()
(let ((num 0))
(if (evenp (setf num (random 299)))
(1+ num)
(num))))
Run Code Online (Sandbox Code Playgroud)
也行不通.我在这里错过了什么?
这就是我的作品wason-deck:
((15 . D) (35 . H) (3 . B) (19 . K) (L . 15) (A . 16) (T . 23) (R . 53)
(N . 13) (M . 7) (I . 52) (35 . Q) (S . 19) (Y . 29) (45 . G) (44 . W)
(11 . V) (J . 25) (21 . F) (39 . Z) (25 . X) (50 . E) (5 . P) (33 . C)
(O . 34))
Run Code Online (Sandbox Code Playgroud)
这是代表Wason牌 …
我再次尝试理解 The Little MLer。TLMLer 有这个 SML 代码
datatype a pizza = Bottom | Topping of (a * (a pizza))
datatype fish = Anchovy | Lox | Tuna
Run Code Online (Sandbox Code Playgroud)
我已经翻译为
data PizzaSh a = CrustSh | ToppingSh a (PizzaSh a)
data FishPSh = AnchovyPSh | LoxPSh | TunaPSh
Run Code Online (Sandbox Code Playgroud)
然后可能是更接近 TLMLer 的替代方案
data PizzaSh2 a = CrustSh2 | ToppingSh2 (a, PizzaSh2 a)
Run Code Online (Sandbox Code Playgroud)
从每一个我创造一个比萨
fpizza1 = ToppingSh AnchovyPSh (ToppingSh TunaPSh (ToppingSh LoxPSh CrustSh))
fpizza2 = ToppingSh2 (AnchovyPSh, ToppingSh2 (LoxPSh, ToppingSh2 (TunaPSh, CrustSh2))) …Run Code Online (Sandbox Code Playgroud) 我有这些
data Fruit = Peach | Apple | Pear | Lemon | Fig deriving (Show,Eq)
data FTree = Bud | Split FTree FTree | Flat Fruit FTree deriving (Show,Eq)
Run Code Online (Sandbox Code Playgroud)
这意味着计算输入的水果类型的出现次数
ftreeFOccurs cft ft =
let ftFO Bud = 0
ftFO (Flat frt ft) = if (frt == cft) then (1 + (ftFO ft)) else (ftFO ft)
ftFO (Split ft1 ft2) = (Split (ftFO ft1) (ftFO ft2))
in ftFO ft
Run Code Online (Sandbox Code Playgroud)
这将是一棵典型的树
Split (Split Bud Bud) (Flat Fig (Flat Lemon (Flat Apple …Run Code Online (Sandbox Code Playgroud)