小编Mir*_*lov的帖子

在 Lisp 中对树使用 reduce

要在 Lisp 中折叠平面列表,可以使用reduce

* (reduce #'+ '(1 2 3 4 5))
15
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个任意复杂的树,并且我想对每个元素应用一个函数,该怎么办?那么折叠'(1 (2) (3 (4) 5))仍然会给出15?我尝试使用reduce,但我必须提供一个自定义函数,这有点违背了目的:

(defun tree+ (a b)
  (cond ((null b) 0)
        ((atom b) (+ a b))
        (t (+ (tree+ a (car b))
              (tree+ 0 (cdr b))))))

(reduce #'tree+ '(1 (2) (3 (4) 5)) :initial-value 0) ; returns 15
Run Code Online (Sandbox Code Playgroud)

当然,我可以先展平列表,但这reduce是一个通用函数,有时您必须保留原始序列的结构和顺序。例如,mapfilter可以用 来实现reduce。如果我想my-map基于编写 的实现reduce,那么:

(my-map '1+ '(1 (2 (3) …
Run Code Online (Sandbox Code Playgroud)

lisp tree common-lisp fold

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

Haskell中数字列表的成对距离

如果X是一组数字,然后?X是一个多集的数字,表示每个2号之间的成对减法.例如,如果X一行中的一组点按递增顺序排列,那么?X这些点之间的成对距离是多重的.如何编写一个返回数字列表的成对距离的函数?以下工作,但我想要一个更优雅的解决方案.请包括理论或直觉,如果可能的话,可以提供有关如何解决类似问题的见解.

pairwise_distances :: [Int] -> [Int]
pairwise_distances [] = []
pairwise_distances [x] = []
pairwise_distances (x:xs) = sort $ map (abs . (x-)) xs ++ pairwise_distances xs

pairwise_distances [3,2,1] -- [1,1,2]
pairwise_distances [0,2,4,7,10] -- [2,2,3,3,4,5,6,7,8,10]
Run Code Online (Sandbox Code Playgroud)

haskell combinatorics

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

在 Marp 中插入表

我正在使用 Marp 生成 pdf 演示文稿(markdown 语法)。对于演示文稿,我必须从 pandas 数据框中插入表格。我现在使用的技巧是通过 pandas 打印“to_markdown”并将结果复制粘贴到我的 Markdown 代码中,但我无法更改字体大小并选择放置表格的位置。Marp文档对于此类问题没有太大帮助。如何修改 Markdown 中的字体大小和表格本地化?

markdown presentation pandas marp

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

find-grep和grep-find有什么区别?

find-grepgrep-findEmacs有什么区别?

emacs

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

枚举Haskell中的元组实例

我想定义一个元组(x, y)作为一个实例Enum类,知道这两个xy的实例Enum.以下尝试:

instance (Enum x, Enum y) => Enum (x, y) where
    toEnum = y
    enumFrom x = (x, x)
Run Code Online (Sandbox Code Playgroud)

只导致错误(y不在范围内).我是Haskell的新手,有人可以解释如何声明这样的实例吗?

haskell types

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

如果修改了Emacs缓冲区,则从elisp中查找

我正在自定义模式行,我想在其上放置一个字符串"未保存",如果文件被修改.如何直接从elisp中找出Emacs中的当前缓冲区是否被修改?

emacs elisp modeline

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

列出所有包含 regexp 的 Emacs 变量

如何在 Emacs 中查找名称中包含“目录”的所有变量?

variables emacs elisp

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

在Haskell方格的方格桌

有时您需要一个方格的数据结构,例如,如果您为棋盘建模.表示方格数据的最简单方法是通过列表列表.

[[0,1,0],
 [1,0,1],
 [0,1,0]]
Run Code Online (Sandbox Code Playgroud)

以上是方格列表的示例.我的第一次尝试:

import Data.List

checker :: Integral i => i -> a -> a -> [[a]]
checker n a b = genericTake n $ intersperse (genericTake n xs2) $ repeat (genericTake n xs1)
  where xs1 = checker' a b
        xs2 = drop 1 xs1

checker' :: a -> a -> [a]
checker' a b = intersperse b $ repeat a
Run Code Online (Sandbox Code Playgroud)

代码很冗长,但结果是正确的:

*Main> checker 5 0 1
[[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,0]]
Run Code Online (Sandbox Code Playgroud)

如何在Haskell中编写一个函数来创建任意大小的列表?

haskell

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

添加 MARP 演示文稿的内部链接

我有一个基本的 MARP 演示文稿,https://github.com/marp-team/marp。我想添加链接来模拟脚注或参考文献。可以吗,导出PDF怎么样?

Some text with source. [1]
Run Code Online (Sandbox Code Playgroud)

“1”应该链接到另一张幻灯片:

1. some description
Run Code Online (Sandbox Code Playgroud)

PS 我没有足够的声誉来marp为这个问题创建标签,如 MARP 自述文件所述。

markdown marp

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

Foldr应用程序

最近我试图使用Foldr解决问题.任务如下:

In:[5,1,3,8,2,4,7,1]
Out:[16,8]
Run Code Online (Sandbox Code Playgroud)

这意味着,我将输入列表中的那些元素加倍,这些元素位于奇数索引位置和偶数位.我编写的程序没有使用以下的foldr :(它显示模式匹配失败:head [])

findPos list elt =
  map fst $ filter ((elt==).snd) $ zip [0..] list

doublePos [] = []
doublePos (x:xs)
  | ((head(findPos xs x)`mod` 2) /= 0) && (x `mod` 2 == 0) =
      [2*x] ++ doublePos xs
  | otherwise = doublePos xs
Run Code Online (Sandbox Code Playgroud)

如何使用foldr编写此程序?

haskell

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

将列表分成Haskell中相同长度的子列表

我正在尝试编写一个Haskell代码,它接受一个列表并返回一个列表列表.当我这样做,如下面的代码,我得到"函数reGroup中的非穷举模式"

reGroup :: [[Int]] -> [Int] -> [[Int]]
reGroup [[]] [] = [[]]
reGroup [[]] xs = reGroup [(take 3 xs)] (drop 3 xs)
reGroup [[a]] [] = [[a]]
reGroup [[a]] xs = reGroup [[a], (take 3 xs)] (drop 3 xs)

-- calling the reGroup function from another function as follow
reGroup [[]] [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

我想要的是[1,2,3,4,5,6,7,8,9]- > [[1,2,3], [4,5,6], [7,8,9]].我做错了什么或有人能告诉我一个简单的方法吗?

haskell

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

在Haskell中多次应用函数

向大家学习Haskell("高阶函数"一节,"有些高阶有序"这一小节)描述了一个函数applyTwice,它在一个参数上调用两次函数:

applyTwice :: (a -> a) -> a -> a  
applyTwice f x = f (f x)
Run Code Online (Sandbox Code Playgroud)

但是我需要一个函数,它可以在某个参数上应用某些函数任意次数.例如applyN 3 f x,相当于f $ f $ f x.我如何在Haskell中编写重复应用程序的功能?请发布任何可能的解决方案,使用递归,高阶函数或其他任何东西.

haskell higher-order-functions

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

Mapcar就地:破坏性地修改列表列表

我有一份清单清单:(setq xs (list (list 1 2 3) (list 4 5 6) (list 7 8 9))).我想删除每个列表中的第一个元素((2 3) (5 6) (8 9)).非破坏性的做法很容易:(mapcar 'cdr xs).但我想改变原始列表.我试过了:

(mapcar (lambda (x) (setf x (cdr x))) xs)
(mapcar (lambda (x) (pop x)) xs)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.如何xs在不创建任何临时列表的情况下尽可能有效地更改每个变量列表?

lisp common-lisp in-place

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