小编Dan*_*son的帖子

对于一个新的(ish)程序员来说,Lisp难以学习吗?

我对Python有一点经验(足够我可以做的事情,如果/ else/elif和一些随机数生成),但我总是对Lisp语言有一种奇怪的迷恋.我下载了一些方案源代码来查看语法,但这对我来说非常愚蠢.

对于像我这样只有一点编程经验的程序员,给出一些好书,网站和一些时间,学习Common Lisp或Scheme会特别困难吗?哪两个会更容易?就易学性而言,它们与Python和C相比如何?

谢谢

lisp scheme common-lisp

20
推荐指数
3
解决办法
7499
查看次数

在Haskell中,"更高级的类型"*真的*类型?或者他们只是表示*具体*类型的集合,仅此而已?

参数多态函数

考虑以下功能:

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

我们可能会说类型fa -> Int,f因此属于"更高级"类型.

以下哪一项是最准确的思考方式f

  1. 其实也有一个单一 f型的a -> Int.但是,可以使用,作为f :: Int -> Int作为f :: Double -> Int,等等.

  2. 从字面上讲,类型f不是a -> Int.实际上,这只是一种简短的说法,即有一函数f的类型是具体的(即,有一个f :: Int -> Int,一个f :: Double -> Double等等;此外,这些函数中的每一个都是彼此不同的).

更高的金属类型

同样,我们可以考虑以下类型声明:

data Maybe a = Just a | Nothing
Run Code Online (Sandbox Code Playgroud)

并且问两种观点中的哪一种更正确:

  1. 没有 …

haskell types higher-kinded-types parametric-polymorphism

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

Free Monoid和Monoid之间的主要区别是什么?

看起来我非常清楚地了解MonoidHaskell中的内容,但上次我听说过一个叫做免费幺半群的东西.

什么是自由幺半群?它与幺半群有什么关系?

你能在Haskell中提供一个例子吗?

haskell functional-programming category-theory monoids

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

Purescript:为什么 genericEncodeJSON 不能对容器内的类型进行编码?

我不明白为什么下面的程序无法编译。

module Main where

import Prelude
import Effect (Effect)
import Effect.Console (log)
import Data.Generic.Rep (class Generic)
import Foreign.Generic (defaultOptions, genericEncodeJSON)

main :: Effect Unit
main = do
  log "Hello sailor!"

newtype Foo = Foo {
    x :: Int
  , y :: Int
  , z :: Array Bar
}

type Bar = {
    a :: String
  , b :: String
}

derive instance repGenericFoo:: Generic Foo _

fooToJSON :: Foo -> String
fooToJSON = genericEncodeJSON $ defaultOptions { unwrapSingleConstructors = true …
Run Code Online (Sandbox Code Playgroud)

purescript

5
推荐指数
0
解决办法
207
查看次数

遍历数据

我听说这个结构被宽泛地描述为"数据中表示的遍历,应用于某些结构,而不需要应用程序"

它可以定义为:

data X a b r =
    | Done r
    | Step a (X a b (b -> r))
Run Code Online (Sandbox Code Playgroud)

单词描述如下:

  • 该类型X a b r描述了结构的形状
  • 其中包含类型的东西 a
  • 每个人都有a机会生产出类型的东西b
  • 如果你为每个人这样做a,
  • 你得到的东西类型r.

因此,列表的"遍历" [a]具有类型X a b [b],因为如果您可以将每个a列表转换为a,b那么您将得到一个[b].

我的问题是:这个叫做什么?是否有关于它的更多信息的参考?


用法示例:

instance Functor (X a b) where
  fmap f (Done r) = f r
  fmap f (Step a next) = Step a (fmap (f .) …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
0
解决办法
101
查看次数

SBCL中的Make-array

如何make-array在SBCL工作?在C++中是否有一些等价物newdelete运算符,或者它是否是其他东西,也许是汇编程度?

我偷看了源头,却什么都不懂.

lisp compilation common-lisp vm-implementation

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

为什么(2,3)映射到一个点的y值而不是将2和3分别映射到该点的x和y值?Common Lisp

我一直致力于普通lisp的jarvis march实现.jarvis march算法采用一堆点并返回该点云的凸包.我将每个点表示为这样的结构:

(defstruct point x y)
Run Code Online (Sandbox Code Playgroud)

然后我继续定义一个测试集,但是,由于初始化结构的符号相当长(make-point :x 0 :y 1),我决定创建一个自动为我做的函数:

(defun make-points (list)
  (map 
    'list
    (lambda (e) (make-point :x (first e) :y (second e)))
    list))
Run Code Online (Sandbox Code Playgroud)

可悲的是,它不起作用.

(print (first (make-points '('(2 3)))))    ;prints out '#S(POINT :X QUOTE :Y (2 3))' => wrong
(print (make-point :x 2 :y 3))             ;prints out '#S(POINT :X 2 :Y 3)' => correct
Run Code Online (Sandbox Code Playgroud)

它将完整列表(2 3)绑定到所有事物的y值,并且它不为x值赋值.为什么会这样做以及如何解决它.

在此先感谢,我对lisp相当新鲜(正如你可能从这个问题中猜到的那样),如果有人可以帮助我,我将非常感激.如果有人知道任何捷径或对我的工作方法有任何好的论据也会很好,虽然在评论中告诉我他们可能会更好,因为他们不会直接回答这个问题.

mapping common-lisp

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