小编147*_*7pm的帖子

Lisp函数具有默认参数值

我想有一个带有单个参数的CL函数,但也有一个默认参数值.

(defun test1 ((x 0))
  (+ x x))
Run Code Online (Sandbox Code Playgroud)

似乎是语法,但它不起作用.我看到的教程只有与&optional和&key一起使用时才有上面的参数 - 默认形式.是否可以只有一个函数参数并且它具有默认值?

common-lisp

1
推荐指数
1
解决办法
2369
查看次数

常见的lisp是绑定,而不是执行?

在这段代码中

(defun foo ()
   . . .
   (let ((bar (foo)))
      (if bar
         . . .)))
Run Code Online (Sandbox Code Playgroud)

let行,let是唯一有约束力的,对不对?它实际上并没有运行foo.我假设fooif语句中第一次运行(递归),对吗?如果我认为是正确的,有没有办法let实际执行foo,然后将结果分配给bar

common-lisp

1
推荐指数
1
解决办法
79
查看次数

Lambda 演算需要解释

这种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)

但这只是一个猜测。

haskell lambda-calculus let

1
推荐指数
1
解决办法
94
查看次数

Statelessness implies referential transparency?

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 …

haskell stateless referential-transparency

1
推荐指数
1
解决办法
79
查看次数

带参数的 Lisp 格式列表

我正在尝试创建一个函数,该函数将接受一个字符串并显示它。

(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)

如何提供变量以进行格式化?

format common-lisp

0
推荐指数
1
解决办法
2240
查看次数

常见的lisp:如何抑制换行或"软回归"

这段代码

 (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)

common-lisp

0
推荐指数
1
解决办法
127
查看次数

Lisp:创建随机奇数

我有这个:

(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)

也行不通.我在这里错过了什么?

common-lisp

0
推荐指数
1
解决办法
92
查看次数

Lisp:标签还是单独的全局函数?

这就是我的作品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牌 …

common-lisp

0
推荐指数
1
解决办法
54
查看次数

用户定义的基于元组的数据构造函数

我再次尝试理解 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)

haskell types tuples sml cons

0
推荐指数
1
解决办法
83
查看次数

里面的函数 let not Num

我有这些

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)

tree haskell let

0
推荐指数
1
解决办法
60
查看次数